賦值運算符把值存儲在某種變量中或賦予某種變量蛋济。左側(cè)操作數(shù)必須是適當(dāng)?shù)木植孔兞炕怼?shù)組元素或?qū)ο笞侄伟锱觥S覀?cè)操作數(shù)可以是與變量兼容的任何類型电谣。賦值表達式的計算結(jié)果是賦予變量的值。不過恭理,更重要的是拯辙,賦值表達式的副作用是執(zhí)行賦值操作。和其他二元運算符不同的是蚯斯,賦值運算符是右結(jié)合的薄风,也就是說饵较,賦值表達式 a=b=c 從右向左執(zhí)行拍嵌,即 a=(b=c)。
基本的賦值運算符是 =循诉。別把它和相等運算符 == 搞混了横辆。為了區(qū)別這兩個運算符,我們建議你把 = 讀作“被賦值為”茄猫。
除了這個簡單的賦值運算符之外狈蚤,Java 還定義了另外 11 個運算符,其中 5 個與算術(shù)運算符一起使用划纽,6 個與位運算符和位移運算符一起使用脆侮。例如,+= 運算符先讀取左側(cè)變量的值勇劣,再和右側(cè)操作數(shù)相加靖避。這種表達式的副作用是把兩數(shù)之和賦值給左側(cè)變量潭枣,返回值也是兩數(shù)之和。因此幻捏,表達式 x+=2 幾乎和 x=x+2 一樣盆犁。這兩種表達式之間的區(qū)別是,+= 運算符只會計算一次左側(cè)操作數(shù)篡九。如果左側(cè)操作數(shù)有副作用谐岁,這個區(qū)別就體現(xiàn)出來了。如下兩個表達式并不等效:
a[i++] += 2;
a[i++] = a[i++] + 2;
組合賦值運算符的一般格式為:
var op= value
如果 var 沒有副作用)等效于:
var = var op value
可用的組合賦值運算符有:
+=? ? -=? ? *=? ? /=? ??%=? ? ? ?// 算術(shù)運算符加賦值運算符
&=? ? |=? ? ^=? ? ??// 位運算符加賦值運算符
<<=? >>=? >>>=? ? ??// 位移運算符加賦值運算符
其中榛臼,最常用的運算符是 += 和 -=伊佃,不過處理布爾值標志時,&= 和 |= 也有用沛善。例如:
i += 2;? ? ?// 循環(huán)計數(shù)器增加2
c -= 5;? ? ?//計數(shù)器減小5
flags |= f;? ? ?//在一組整數(shù)標志flags中設(shè)定f標志
flags &= ~f;? ? ?// 在一組整數(shù)標志flags中清除f標志