发布网友 发布时间:2022-04-29 18:56
共6个回答
热心网友 时间:2022-06-20 01:20
上面输出 0 因为i++这一刻i还是0,等于把0再次赋值给i一次。热心网友 时间:2022-06-20 01:20
i的值打印出来还是0热心网友 时间:2022-06-20 01:21
首先说第一个问题:输出应该是0;i=i++的执行过程是这样的,因为“=”是右结合的运算符,所以在执行完i++后,i的值是1;而i的原值0被被另外保存以作赋值运算。然后在把保存的0值赋给i,所以整个语句执行后i的值为0;第二个问题:第一个语句是错误的,应为s是short类型的。而数字默认是int型。把1(int型)赋值给s(short)型需要强制类型转换。而s+=1这样的运算编译器本身会对其进行指令优化。执行过程同s=s+1不一样。s=s+1首先要分配一个short类型的内存单元存放s然后在分配一个int类型的内存单元存放1,然后做运算结果(int型)赋值给s;而s是short型,因此此语句有错。而s+=1是不会另外申请内存单元,在原来的存放s的内存单元的基础上加1,不存在赋值的问题,相当于执行s++,所以无语法错误。热心网友 时间:2022-06-20 01:21
开往下一站 - 经理 四级 12-5 21:28热心网友 时间:2022-06-20 01:22
楼上有个小错误:热心网友 时间:2022-06-20 01:23
short是16位字节,int是32位字节,在java中短字节类型可以自动转化为长字节类型,但是长字节类型就必须强制转化为短字节类型,比如:s=(short)(s+1);如果s=s+1会出现类型不匹配错误.