隐式转换:
把一个取值范围小的数值或者变量,赋值给另一个取值范围大的变量。并转换类型。
取值范围小的数据,和取值范围大的数据进行运算时,小的会先提升为大的之后,再进行运算。(byte、short、char 三种数据在运算时,都会提升为int,然后再进行运算)
而Java中数据类型不一致无法进行运算。
强制转换:
- 将数值范围大的数据或变量,给取值范围小的变量赋值,不允许直接赋值,需要加入强转。
- 格式:目标数据类型 变量名=(目标数据类型)被强转的数据。
- 注意:强转可能会出现精度损失。(下文介绍)
进制书写
0b-二进制,0-八进制,0x-16进制。
so:编数值尽量不要以0开头,会判成八进制。转字符串没事。(jdk7以上才可以)
二进制的原反补码
so强转的精度损失
常量优化机制
Java存在常量优化机制:byte b=3+4; 在编译的时候(javac)就会将3和4这两个字面量进行运算。产生的字节码文件里是:byte b=7;
即如果查看编译完成的.class文件的内容会发现,byte b=3+4;的位置变成了byte b=7;