byte<int <long<double
java默认的整型常量都是int型,默认的浮点型常量是double型。
1.数据转换规律:
- 数据范围小的数据与数据范围大的数据进行数学计算的时候,自动向大范围的数据转换计算。
- 数据范围大的数据变为数据范围小的数据,要采用强制转换。
- 常量进行强制转换有两种:常量标记(L,l)、使用(数据类型)。
2.注意:
- 如果直接将一个较小的整数值(在byte或者short范围内)赋给一个byte或者short变量,系统会自动把这个整数值当成byte或者short类型来处理。
- 如果使用一个巨大的整数值(超出了int ),java不会把这个整数值当成long类型处理。如果要把它赋给long,需要在这个整数值后加L或者l作为后缀。
- 可以把一个较小的整数值(在int类型范围里面)直接赋给一个long类型的变量,这并不是因为java会把这个较小的整数当成long类型来处理,只是int类型的值会自动类型转换到long类型。
- 如果把0——65535范围内的一个int整数 直接赋给char型变量,系统会自动把这个int 型整数当成char型来处理。如果把一个int型变量赋给char型变量,需要强制转换。
3.特殊例子:
1.shorts = 1;
s= s +1;
和
2.shorts = 1;
s+=1;
有问题吗?为什么呢?
解析:
第一程序会报错:错误:不兼容的类型:从int转换到short可能会有损失
原因:s=s+1;s+1会隐式转换为int类型,当把一个int类型赋值给short类型是,可能会损失。
第二个程序可以编译运行。
原因:s+=1,虽然可以看做s=s+1,但是还是有区别的,s+=1中有一个强制转换,即s=(short)(s+1),会把s+1的值强制转换为short类型,故不会报错。
2.整数 除了自增加自减不进行转化外,其它运算时都是无long型时,所有非int类型转成int类型;有long类型时,都转成long类型。
.