赋值
1、等号左边一般为以变量为代表的内存空间
2、等号右边一般为(字面量,变量,表达式)
3、类型一致;类型不一致(类型转换、类型提升)
(1)类型转换 :Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验. 当参与运算数据类型不一致时,就会进行类型转换。(不能与Boolean类型进行转换)
A、自动类型转换(隐式)代码不需要任何处理,在代码编译时,编译器会自动进行处理。 特点:数据范围小的转为数据范围大的时会自动进行。
long a = 10 ; int --> long 天生成立
B、强制类型转换(显式)当进行操作时,代码需要经过一定的格式处理,不能自动完成。 特点:数据范围大的到数据范围小的。可能会有精度损失
int a = 10 L ; long --> int × 默认不成立,需要强制类型转换
int a = ( int ) 10 L; √
C、类型转换具体的情况
Double > float > long > int > (char) > short > byte
注意:将一个将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
(字面量默认为int型,有特殊处理)
(2)类型提升 :不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。
A、一般的类型提升,对于不同类型的数据混合运算,范围小的会提升为范围大的
int a = 10;
long b = 20;
int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据
long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给long
B、由于字节的提升,计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte(1字节) 和 short(2字节) 这种低于 4 个字节的类型,会先提升成4个字节的int, 再参与计算.
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c); // 编译报错 错误: 不兼容的类型: 从int转换到byte可能会有损失 ×
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c); // 编译成功