Java变量及数据类型

Java变量及数据类型

  • 变量
    • 变量的声明
    • 变量的命名
    • 变量的初始化
    • 变量的访问
  • 数据类型
    • 基本数据类型
      • int---最常用的整数类型
      • double、float类型
      • char类型
      • boolean类型
    • 引用数据类型
    • 类型转换
      • 类型提升

变量

变量就是在内存中,开辟的存储空间,用于存放运算过程中需要用到的数据。

变量的声明

  1. 当需要使用一个变量时,必须对该变量进行声明,用特定的语法声明一个变量,让运行环境为其分配空间。
    变量的声明包含两点:变量名和变量类型
  2. 未经声明的变量不能使用
    Java语言规定,变量使用之前,必须声明,否则编译不通过。
  3. 一条语句中声明多个同类型变量
    如果多个变量的类型相同,可以在一条语句中声明,中间用逗号分隔。

变量的命名

  1. 可以由字母、数字、"_"、和"$"组成,首字母不能以数字开头, Java大小写敏感,命名变量时需要注意,不能使用Java保留字(一些Java语言规定好的,有特殊含义的字符),如int、if、for、break等。
  2. 驼峰命名法
    如果名字由多个单词组成,第一个单词首字母小写,其它单词首字母大写,例如:className、studentName、schoolName、schoolClassNameStudentName等。
  3. 变量需要有一个见名知意的名字,而且要符合Java语言规范。中文可以作为变量名,但是使用需要适度。

变量的初始化

  1. 未经初始化的变量不能使用,Java语言规定在使用之前必须初始化,即必须给该变量赋予特定的值。
  2. Java变量可以在变量声明时初始化
    变量类型 变量名称 = 初始值;
  3. 在第一次使用变量前初始化
    可以在变量声明以后,通过赋值语句对变量进行初始化,但一定要确保在第一次使用该变量之前。

变量的访问

可以对变量中的值进行存取操作,变量存放数据的空间,可以对其赋值、更改和操作,但必须和其类型匹配。

数据类型

Java数据类型分为两大类:基本数据类型和引用数据类型。

基本数据类型: 在创建时,在栈上给其划分一块内存,将数值直接存储在栈上。
引用数据类型: 在创建时,首先要在栈上给其引用(句柄)分配一块内存,而 对象的具体信息都在堆内存上,然后又栈上面的引用指向堆中对象的地址。

基本数据类型

Java语言有八种基本的数据类型,分为用于存储整数、浮点数、字符数据和布尔类型数据。
Java变量及数据类型_第1张图片

int—最常用的整数类型

整数的直接量的类型默认为int类型,如果直接写出的整数超过了int的表达范围,将会出现变异错误
除了通常的十进制书写形式,整数直接量也经常写16进制的形式(以0X或0x开头),或8进制的形式(以0开头)。

  1. 整型数据取整,不是四舍五入,而是直接舍弃小数部分
  2. 运行时要防止溢出的发生,溢出产生的数据将会不正确

double、float类型

表示整数时,如果int类型的范围不够,可以使用long型,如果要表示long直接量,需要以L或l结尾。

  • 浮点数就是小数,包括float和double。
  • double类型的精度值时float类型的两倍,所以这是其名称(双精度)的来由。
  • 浮点数直接量是double类型。浮点数直接量有两种写法:
    通常写法,如:3.14、314、0.1、.5
    科学计数法,如:1.25E2,1.25e2、1.25E-2。其中,1,25E表示1.25乘以10的2次方
  • 默认的浮点数因为直接量是double,如果需要表示float类型的直接量,需要加F或f后缀
  • double运算时会出现舍入误差,二进制系统中,无法精确表示1/10,将好像十进制系统中无法精确表示1/3一样,所以二进制表示十进制会有一些舍入误差,对于一些要求精确运算的场合会导致代码的缺陷。

char类型

字符类型实际上是一个16位无符号的整数,这个值是对应字符的编码,Java字符类型采用Unicode字符编码。
Unicode是世界上通用的定长字符集,所有的字符都是16位。字符直接量可以采用如:‘中’的形式,也可以采用16进制的值表示形式,如‘\u4e2d’。

对char类型变量赋值是,可以采用如下三种方式:

  1. 字符直接量:形如‘A’,变量中实际存储的是该字符的Unicode编码(无符号整数值),一个char型变量只能存储一个字符。
  2. 整型直接量:范围在0~65535之间的整数,变量中实际存储的即该整数的值,但表示的是该整数值所对应的Unicode字符。
  3. Unicode形式:如‘\u4e2d’,‘\u0041’,Unicode字符的十六进制形式。

对于不方便输出的字符采用转义字符:
 ‘\n’ 表示回车符
 ‘\r’ 表示换行符
 ‘\\’ 表示反斜杆(\)
 ‘\’’ 表示单引号(’)
 ‘\"’ 表示双引号(")

boolean类型

  • boolean类型适用于逻辑运算,表示某个条件是否成立,一般用于程序的流程控制。
  • boolean类型只允许取值true或false。
  • boolean类型经常用于存储关系运算的结果,所谓关系运算就是比较两个变量的大小相等等关系。

引用数据类型

  • 类、接口、数组、枚举、注解
  • String类型属于引用类型

类型转换

  1. 自动类型转换(隐式类型转换)
    从小类型到大类型都可以自动完成
    Java变量及数据类型_第2张图片
  2. 强制转换
    从大类型到小类型需要强制转换:
    (需要转换成的类型)变量,但这样转换有可能会造成精度损失或溢出。
public class TestChange {
    public static void main(String[] args){
        int a = 100;
        int b = 200;
        long c = a + b; //自动将int转换为long

        long l1 = 1024l;
        int i = (int) l1;   //需要强制转换,没有产生溢出

        long l = 1024L * 1024 * 1024 *4;
        int j = (int) l;    //会产生溢出

        double pi = 3.1415926535897932384;
        float f = (float) pi;   //会造成精度损失
    }
}
  1. 数值运算时的自动转换
    多种基本类型参与的表达式运算中,运算结果会自动的向较大的类型进行转换。
public class TestAutoChange {
    public static void main(String[] args){
        //由于有long型的直接量参与,整个表达式的结果为long
        long earthAndMoon = 10 * 365 * 24 * 60 * 60 * 299792458l;
        
        //由于有double型的直接量599.0参与,整个表达式的结果为double
        double change = 800 - 599.0;
        
        //80/100结果为0,右边都是int类型数据,运算结果也为int类型
        //最终结果为0.0,因为0再赋值给double型,将0转换为0.0
        double persent1 = 80/100;

        //结果为0.8,右边表达式有double型直接量参与,
        //运算结果为double型
        double persent2 = 80.0 /100;
    }
}
  1. byte、char、short转换为int
    byte、char、short三种类型实际存储的数据都是整数,在实际使用中遵循如下规则:
    a、 int直接量可以直接赋值给byte、char、short,只要不超过其表示范围
    b、 byte、char、short三种类型参与运算时,先一律转换成int类型再进行运算。
public class Test{
    public static void main(String[] args){
        char ch = 65;
        System.out.println(ch);		// A
        System.out.println(ch+2);	// 67
    }
}

类型提升

进行算术运算时:

  • 两个操作数有一个为double,计算结果提升为double
  • 如果操作数中没有double,有一个float,计算结果提升为float;
  • 如果操作数中没有float,有一个long,结果提升为long;
  • 如果操作数中没有int,均为short和byte,计算结果仍旧提升为int

注意:任何类型与String相加(+)时,实为拼接,其结果自动提升为String

你可能感兴趣的:(Java基础)