1
A
回答
6
基本上没有什么区别,但是还是有细微差别的。
算术赋值运算符执行隐式转换。例如
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.
-1
int a = 10;
int b = 20;
a=a+b; // 30
a+=b; // 30
System.out.println(a);
两者都会给出相同的答案。
1
的JLS(部分15.26.2)表示:
形式E1 OP的化合物赋值表达式= E2相当于E1 =(T)((E1)OP(E2)),其中T是E1的类型,除了E1仅评估一次。
类型转换的存在意味着存在几个边缘情况,其中a = a op b
意味着与a op= b
不同。
请参阅Peter Lawrey的答案举一个例子。当a
是byte
和b
是int
而“op”是+
。 “gotcha”是a + b
产生一个int
,然后不能被分配到a
...没有类型转换。
对于a
和b
以及其他算术运算符和位运算符,其他类型也适用同样的场景。
相关问题
- 1. a + = b和a = + b之间的区别是什么,a ++和++ a?
- 2. 区别 “A级; B类” 和 “类A :: B”
- 3. Python中a - = b和a = a - b的区别
- 4. a,b = b,a + b和a = b,b = a + b在fibonacci中的区别是什么[Python]
- 5. A == B对B == A,有什么区别
- 6. a = a ||之间的区别b和a || = B
- 7. a = a + b和a + = b之间的区别是什么?
- 8. ||之间的区别a = b和a = a || b在红宝石?
- 9. 在PHP OOP中$ a =&$ b,$ a = $ b和$ a = clone $ b之间的区别OOP
- 10. 输入(a + b)** 2,输出a * a + a * b + b * a + b * b
- 11. 混合两个矢量:[a a]和[b b] to [a b a b]
- 12. bash中的$ [a-b]和$((a-b))之间的区别
- 13. Ruby中的object.method(a,b)和方法(a,b)有什么区别
- 14. Scala中f(a,b)和f(a)(b)之间的区别
- 15. MatLab中的[A,B]和[A; B]有什么区别?
- 16. a + b和.__之间的区别__(b)
- 17. [:] = b和a = b [:]之间的区别? (Python)
- 18. (A && B)与(A和B)
- 19. GROUP BY(A,B)和(B,A)
- 20. flash(a,b)和flash()。put(a,b)在PlayFramework中有什么区别?
- 21. 在git中,A..B和A ... B有什么区别?
- 22. Python a,b = b,a + b
- 23. Kleene明星在编程。 (a | b)*和a * b *之间的区别?
- 24. * a = b和a =&b之间的区别是什么?
- 25. a [:] = b和a = b之间的区别是什么?
- 26. SqlAlchemy如何查询列A == a和B == b和A == b和B == a
- 27. 从{a-b,b-c,c-a}改变为{(a,b),(b,c),(c,a)}?
- 28. a // b和int(a/b)之间有什么区别?
- 29. `从abc import a,b`和`from abc import(a,b)`有没有区别?
- 30. array.sort()和array.sort(function(a,b){return a - b;})有什么区别?
[this](http://stackoverflow.com/questions/19957085/why-are-arithmetic-assignment-operators-more-efficient)可能会帮助你 – 2014-10-10 10:17:57
谢谢!这就是我正在寻找的东西,例如将'a'声明为byte,将'b'声明为int将导致a = a + b是非法的,并且a + b是合法的。 – mmgro27 2014-10-10 10:25:06