A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

考一下你们的知识。
1.输出是多少?为什么???
public void myTest()
        {
                byte b=2;
                int i=2147483647;
                byte c=4;
                b=(byte)i;
                System.out.println(b);
        }
第二个问题:

byte b=2;
byte c=2;
b=b+c;//为什么报错
第三个问题:

byte b=2;
int i=2;
b=b+(byte)i;//为什么报

我本来是为了知道第三个问题的,写到这里我豁然开朗,知道为什么了,因为第二题和第三题是一个道理,你要明白了第二题你就直到第三题为什么行不通了。!

5 个回复

倒序浏览
第一题:byte在内存中占1个字节,范围是-128-127,2147483647明显超出了该范围,所以结果是-1
第二题:b+c运算的时候会向上转型先分别将b和c转换成int类型然后再进行运算,最后结果是int类型,所以得把结果转换成byte类型才能赋值给b
第三题:和第二题类型,表面看是将i强制转成byte,其实在进行加法运算的时候,又要转成int,最后结果是int,只有将最后结果强制转成byte才能赋值给b

旁白:当操作数是byte,short,int,char类型进行运算时,都会强制转成int进行运算,结果是int类型

点评

回答的太棒了。  发表于 2015-6-2 12:38
回复 使用道具 举报 1 0
forTomorrow 发表于 2015-6-2 11:54
第一题:byte在内存中占1个字节,范围是-128-127,2147483647明显超出了该范围,所以结果是-1
第二题:b+c ...

不过第一题没说明原因和原理。数值改了结果也是会变的,
2147483647的二进制是
0111 1111 1111 1111 1111 1111 1111 1111
削去前边3个字节,最后一个字节是 1111 1111,代表的是 -1
1取反+1 就是-1
同理可得其他十进制int到byte的值
回复 使用道具 举报
曲终烟尽 发表于 2015-6-2 12:41
不过第一题没说明原因和原理。数值改了结果也是会变的,
2147483647的二进制是
0111 1111 1111 1111 1111 ...

是的,转成byte的话,只取低八位
回复 使用道具 举报
好吧,看了上面都回答的那么好了,进来留个回复吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马