java自动转换&&强制转换

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类型。

.

猜你喜欢

转载自blog.csdn.net/linghuainian/article/details/51995294
今日推荐