Java中a+=b和a=a+b的区别
有人告诉我a+=b之间有区别;a=a+b;这可能会导致其中只有一个是合法的,这取决于类型的偏差 有人举过这样的例子吗Java中a+=b和a=a+b的区别,java,types,operators,Java,Types,Operators,有人告诉我a+=b之间有区别;a=a+b;这可能会导致其中只有一个是合法的,这取决于类型的偏差 有人举过这样的例子吗 int a = 10; int b = 20; a=a+b; // 30 a+=b; // 30 System.out.println(a); 两者给出的答案相同。基本上没有区别,但有细微的区别 算术赋值运算符执行隐式转换。e、 g byte a = 1; int b = 2; a += b; // compiles a = a + b; // doesn't co
int a = 10;
int b = 20;
a=a+b; // 30
a+=b; // 30
System.out.println(a);
两者给出的答案相同。基本上没有区别,但有细微的区别 算术赋值运算符执行隐式转换。e、 g
byte a = 1;
int b = 2;
a += b; // compiles
a = a + b; // doesn't compile as a byte + int = int
a = (byte) (a + b); // compiles as this is the same as +=
更多奇怪的例子
int a = 5;
a += 1.5f;
// a == 6
char ch = '0'; // (char) 49
ch *= 1.1; // ch = '4';
long l = Integer.MAX_VALUE;
l += 0.0f; // i = (long ) ((long ) l + 0.0f)
// i == Integer.MAX_VALUE + 1L; WTF!?
// l is no longer Integer.MAX_VALUE due to rounding error.
JLS部分说:
形式为E1 op=E2的复合赋值表达式相当于E1=T E1 op E2,其中T是E1的类型,但E1只计算一次
类型转换的存在意味着存在两种边缘情况,其中a=a op b表示与a op=b不同的内容
一个例子见Peter Lawrey的答案。当a是一个字节,b是一个整数,op是+。得到的答案是a+b产生一个整数,然后不能分配给a。。。没有打字
同样的情况也适用于a和b的其他类型以及其他算术运算符和位运算符。可能有助于您了解!这就是我一直在寻找的,例如,将“a”声明为字节,“b”声明为int将导致a=a+b非法,而a+=b合法。