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