类型范围小的变量,可以直接赋值给类型范围大的变量。例如:byte型数据可以直接转换成int型,而不会丢失数据。
public class TypeDemo { public static void main(String[] args) { byte a = 10; int b = a; System.out.println(a); System.out.println(b); } }
自动类型转换底层原理:
范围小的变量类型,占用二进制位数少,当将其转换成范围大的变量类型时,直接将其原有二进制数据全部保留下来,并在其前补0至满足大范围类型的二进制位数,以此来完成小类型到大类型的自动类型转换。
其它类型的自动类型转换
在表达式的运算中,若既存在着大范围类型,也存在小范围类型的数据,则在进行运算时,会先将小类型的数据转换成大类型的数据,然后再进行运算。
注意:
1.表达式的最终结果由表达式中的最高类型决定;
2.在表达式中,byte、short、char是直接转换成int参与运算的,也就是在表达式中,如上三种类型是直接按照int进行运算的。
另注意:byte与byte相加,byte接收出现错误,应用int类型进行接收,原因如上。
当遇到需要将大类型转换为小类型时,Java提供了强制类型转换以供完成该任务,强制类型转换可以将类型范围大的变量、数值赋值给小的变量
底层原理
当大类型需要通过强制类型转换成小类型时,大类型占用二进制位数更多,此时为了转换成小类型所需的二进制位数,需要将前边多余的二进制位“砍掉”,以此来完成强制类型转换。
但是由于该原理的操作方式,也存在着些许的问题,即当大类型数据超出小类型的范围时,强制类型转化后的结果会出现溢出或丢失。
注意:
1.强制类型转换可能会造成数据的溢出或丢失;
2.浮点类型转化成整型时,直接丢掉小数部分,保留整数部分。
例:
public class OperatorDemo { public static void main(String[] args) { int a = 20; int b = 3; System.out.println(a + b); //23 System.out.println(a - b); //17 System.out.println(a * b); //60 System.out.println(a / b); //6 System.out.println(a * 1.0 / b); //6.6666666666666... System.out.println(a % b); //2 } }
基本赋值运算符:“=”
拓展赋值运算符
关系运算符是对数据进行条件判断的符号,最终会返回一个布尔值。
三目运算符格式:
执行流程:先执行条件表达式,得出条件表达式的结果,若为真,三目运算符的值为值1,否则为值2。