i++和++i问题,每次刷面试题都能看到
也有好多人在问
今天就详细的整理下
首先先了解下运算符号的优先级
i++和++i的区别
(1)i++简单来说就是先用i的值来参加表达式的计算,然后再自加1
i=4;
a=i++; //此时,先做a=i=4,再做i++,故a=4,i=5
(2)++i则是先自增1,再用自加后的值来做运算。
i=4;
a=++i; //此时,先做++i=5,再做a=++1,故a=5,i=5
单看起来感觉挺简单的,为了更好的掌握,下面搞了个题目加深下印象
题目
x的值等于4
y的值等于6
遇到++x时 x先加一 再执行
遇到x++时 x的值不变,执行完当前操作后,x的值再加一
x++的时候 x=3
++x 时候 y=3++3 , y=6 ,x=4
题目
static int x,y; 初始化为0
x– 此时 x的值就为-1了
这个y的值就为 y =0+++0 运算顺序变成 (最后一次不算)
所以y=0,x=1
最后的 x+y+++x
遵循 遇到x++时 x的值不变,执行完当前操作后,x的值再加一
1+0+++1
结果就变成 2了
转换的问题:
short i=1;short i=i+1错的理由
java会自动将小容量的变量进行精度提升,然后再进行运算,得到的结果类型是提升后的大容量的数据类型.如果将该结果赋值给小容量的数据类型的变量,则必须进行强制的类型转换
short i+=1对的理由
s1+=i的方式java会对i进行窄化转换,由编译程序自动执行