1、++i 和 i++ 的区别(--i 和 i-- 一样)
1)单独使用
public class TestDemo
{
public static void main(String[] args)
{
int a = 1;
int b = 1;
a++;
++b;
System.out.println("a = " + a + ", b = " + b);
}
}
运行结果:
2)赋值使用
public class TestDemo
{
public static void main(String[] args)
{
int a = 1;
int b = 1;
int c = ++a;
int d = b++;
System.out.println("a = " + a + ", b = " + b + ", c = " + c + ", d = " + d);
}
}
运行结果:
综上所述:
当单独使用时,++i 和 i++ 效果是一样的,都是做自加运算。而在和赋值语句一起使用时,++ 在前,i 先自加,再赋值;++ 在后,先赋值,再自加。c = ++a,a 进行自加,然后再赋值给 c,所以 c 的输出结果为 2;而 d=b++,b 先将自己的值赋给 d,然后再进行自加,所以 d = 1;变量 a 和 b 都进行了自加运算,所以输出结果都为 2。
2、i += 1 和 i = i + 1 的区别
一直以来都以为这两个表达式是等效的,但是在看了传智播客刘意老师的视频后发现并非如此
public class TestDemo
{
public static void main(String[] args)
{
byte b = 100;
b = b + 1;
}
}
编译报错:
public class TestDemo
{
public static void main(String[] args)
{
byte b = 100;
b += 1;
}
}
编译通过:
由此可以看出 i += 1 和 i = i + 1 并不是等效的,i += 1 应该等效于 i = (byte) (i + 1),在本例子中,i 的数据类型为 byte,实际上 i += 1 应该等效于 i = (i的数据类型) (i + 1),此处有一个隐含的数据强转过程。