java经典问题 byte b=1、b=b+1、b+=1

直接问题:

首先 byte的范围 [-128,127]

byte 类型可以自动转为int类型 int类型不能自动转为byte类型。

超过byte的范围,就会变成int类型了

byte b=1:正确,

b=b+1:报错,

b+=1:正确。

根本考察就是 byte相计算的时候如果不进行强制转换,都会编译错误的。

        byte b=1,检查右边没有超过byte的范围(-128到127)。系统强转为1为byte型;     

        b=b+1,1默认为int类型,b自动转型为int与1做加法,结果是int类型的。把int类型赋给byte类型b.就报错了。顺便说一下,如果b=b+1改为b+=1就没错了。

        b += 1,其实等价于 b = (byte)(b+1);底层会对这个结果进行强转的,所以它编译的时候没事,如果b是127, 那么加1后变成128了,成了int类型了,超过了byte类型的最大范围了,系统会强转,把int类型的 前面三个高位丢弃,丢弃后,如果剩下的一位中,最高位为1,则取反加一,就成了负数了,如果最高位为0,直接把值赋给b 。

演化问题:

public void add(Byte b)
{
b = b++;
}

@Test
public void test()
{
Byte a = 127;
Byte b = 127;

add(++a);
System.out.print(a + " ");

add(b);
System.out.print(b + "");
}

输出:
a:-128
b:127
有疑问
posted @ 2019-06-18 14:27  乔胖胖  阅读(2961)  评论(0编辑  收藏  举报