一、基本数据类型
int是最常用的数据类型,因此通常情况下,直接给出一个整数值默认就是int类型。
小数默认double类型
除此之外,如下两种情况必须指出。
★如果直接讲一个较小的整数值(在byte或short范围内)赋给一个byte或short变量,系统会把这个整数值当成该类型来处理。
★如果使用一个巨大整数值(超出了int范围)时,java不会自动把这个整数值当成long类型来处理,应该在后面添加I或者L后缀,通常推荐使用L,I易与1混淆。
验证以上结论:
二、自动类型转换
在Java中不同类型的数据是不能进行计算的。
java中的运算特性:自动类型提升(以大的为主,数据类型自动提升到与表达式中最高的等级操作数同样的类型最高位double)
自动类型转换图
例如:
输出:7, b由byte转为int;
如果出现 b = b + 1; 就会出现无法编译, b+1为int型,b为byte型,类型不一致,编译错误;
结论:赋值运算时常量可以进行自动类型转化,变量不可以
例如:在(byte+btye、short+short、short+byte中)
这三种情况都不能正常编译,一般来讲,byte = btye + byte......所以这是为什么呢?
这是由于jvm内部指令造成的。
如图片所示,加运算(Tadd)只有int,long,float,double四个数字类型支持,所以比int小的加运算自动转化成int的加运算,结果也是int
因为b1和b2都是byte类型,在进行计算的时候a和b都被自动提升为int类型,而等式左边的b3仍然是byte类型的,所以编译就会出错,这种情况只能进行强转。
总结:在进行加运算的时候比int小的数据类型之间的运算都会自动转化成int的加运算,所以赋值的时候就得注意两边的数据类型是否一致。