2013-05-03 69 views
5

我瞭解到i+=2i=i+2的簡稱。但現在我懷疑它。 對於下面的代碼,上述知識沒有保持良好:短手賦值運算符,+ =,真含義?

byte b=0; b=b+2; //Error:Required byte, Found int

上面的代碼是合理的,因爲2int類型和表達式返回int值。

但是,下面的代碼罰款運行:

byte b=0; b+=2; //b stores 2 after += operation

這迫使我懷疑+=短手操作有些比我知道的。 請賜教。

+0

請參閱:http://stackoverflow.com/questions/7038012/typecasting-with-shorthand-operators – 2013-05-03 15:07:31

+2

沒有用處在回答存在良好答案時。檢查[這一個](http://stackoverflow.com/questions/8710619/java-operator)。那裏覆蓋了這個問題。 – Gamb 2013-05-03 15:08:25

回答

10

如果有疑問,您可以隨時檢查Java語言規範。在這種情況下,相關部分是15.26.2,複合分配運算符。

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

所以你幾乎是正確的,除了添加了演員陣容。你的情況: b+=2;有資格b=(byte)(b+2);

+0

簡潔明瞭+1 – 2013-05-03 15:10:37

+0

據此不會還算2還算是int嗎?填充佔位符,我讀爲b =(byte)b + 2; – 2013-05-03 15:11:02

+0

所以'i + = 2'符合'i =(類型i)(i + 2)'。謝謝:) – 2013-05-03 15:12:58

0

從C++背景的,我可以嘗試聲稱,這個概念是相似的。運算符+=被定義爲其左側的對象方法,將該對象作爲參數傳遞給右側。這使得語言的作者拋出諸如類型轉換和兼容性修補這樣的東西變得微不足道。據我所知,唯一的事情是Java不允許用戶超載運算符功能