Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中a+=b和a=a+b的区别_Java_Types_Operators - Fatal编程技术网

Java中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

有人告诉我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 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合法。