java中byte类型和int类型运算的区别(里边有个小困惑)
默认的整数类型为int,而默认的浮点型为double。
整数类型分别有byte(一个字节)、short(两个字节)、int(四个字节)、long(八个字节)。
========================================================================
byte b = 4;
int i = 3;
i = i +b;
结果为7,因为当一个byte类型的数据和int数据运算,byte类型会向上转型(成为四个字节)。
========================================================================
byte b = 4;
b = b+3;(×)
b=(byte)(b+3);(√)
之所以错是因为3是int类型,就意味着b会自动转型为int 类型,相加之后赋值给b,这个时候就相当于要把int类型的值要赋值给byte类型的b,所以会造成精度损失,自然出错。加上(byte)则意味着强制转换。
======================================================================
接下类是一个重点:
byte b=4;
b=4+3;
-----------------------
byte b = 4 ;
byte b1 = 3 ;
byte b2 = 5 ;
b = b1 + b2 ;
-------------------------------
int x=4;
int x1=Integer.MAX_VALUE;
int x2=5;
x = x1+x2;
如上两个分别输出b的结果
第一个输出7,第二个输出会损失精度,第三个会输出溢出后的值,不会报错
解释如下:
1)赋值b=4;此时4是int类型,由于4属于byte的范围之内(-128~127),所以可以被赋值,同样的道理,所以b=7;
2)因为b=b1+b2,本身b1、b2这两者是变量,计算机无法判断两者运算后是否会溢出,所以直接报错(困惑:明明已经给b1、b2赋值,为什么计算的时候,计算机会担心溢出呢)。
3)相比第二个,为什么第三个不会报错,因为int类型是默认类型,所以即使运算结果可能会溢出,计算机也会直接舍弃溢出部分,输出结果(即使他是不对的)。
由此可见,默认类型的强大功能
类推对于float和double也同样适用
======================================================================
整数类型分别有byte(一个字节)、short(两个字节)、int(四个字节)、long(八个字节)。
========================================================================
byte b = 4;
int i = 3;
i = i +b;
结果为7,因为当一个byte类型的数据和int数据运算,byte类型会向上转型(成为四个字节)。
========================================================================
byte b = 4;
b = b+3;(×)
b=(byte)(b+3);(√)
之所以错是因为3是int类型,就意味着b会自动转型为int 类型,相加之后赋值给b,这个时候就相当于要把int类型的值要赋值给byte类型的b,所以会造成精度损失,自然出错。加上(byte)则意味着强制转换。
======================================================================
接下类是一个重点:
byte b=4;
b=4+3;
-----------------------
byte b = 4 ;
byte b1 = 3 ;
byte b2 = 5 ;
b = b1 + b2 ;
-------------------------------
int x=4;
int x1=Integer.MAX_VALUE;
int x2=5;
x = x1+x2;
如上两个分别输出b的结果
第一个输出7,第二个输出会损失精度,第三个会输出溢出后的值,不会报错
解释如下:
1)赋值b=4;此时4是int类型,由于4属于byte的范围之内(-128~127),所以可以被赋值,同样的道理,所以b=7;
2)因为b=b1+b2,本身b1、b2这两者是变量,计算机无法判断两者运算后是否会溢出,所以直接报错(困惑:明明已经给b1、b2赋值,为什么计算的时候,计算机会担心溢出呢)。
3)相比第二个,为什么第三个不会报错,因为int类型是默认类型,所以即使运算结果可能会溢出,计算机也会直接舍弃溢出部分,输出结果(即使他是不对的)。
由此可见,默认类型的强大功能
类推对于float和double也同样适用
======================================================================
热门话题 · · · · · · ( 去话题广场 )
- 歌手2024直播 4.4万次浏览
- 你人生中读的第一本课外书 9.1万次浏览
- 晒出你家猫主子拆家的照片 12.6万次浏览
- 乡野里的野食 33.8万次浏览
- 第一次出差的经历 19.8万次浏览
- 你的高三生活 21.3万次浏览