官术网_书友最值得收藏!

2.2.2 賦值運算符

前面的加減乘除四則運算的計算結果通過等號輸出給指定變量,注意此時代碼把變量放到等號左邊。而在算術課本里,加法運算的完整寫法類似于“1+1=2”這樣,運算結果應該跟在等號右邊。不過代數課本里的方程式存在“x=y+1”的寫法,表示等號兩邊的結果數值是一樣的,因此變量放在等號左邊也是可以理解的。然而Java編程里的“=”并非數學上相等的意思,而是一種賦值操作。所謂“賦值”,指的是將某一數值賦給某個變量的過程。計算機程序在運行的時候,無論操作什么類型的數據,都要有個地方保存運算前后的數值。變量在參與計算的時候,它可能存在多種身份,當變量作為運算過程的操作數時,它保存的是運算前的數值;當變量作為運算結果的結果數時,它保存的是運算后的數值。故而等號兩邊同時出現某個變量是完全正常的,就像下面的代碼演示的那樣:

// 數學中的加法例子是:1+1=2,運算結果在右邊。但Java編程中是把運算結果放在左邊的
int x=1+1;
// 注意這里的等號是賦值操作,并非代數方程式里面的等號,否則x=x+7將會求得0=7的荒誕結果
x=x+7;

注意上述演示代碼里的“x=x+7”,等號的左右兩邊雖然都出現了整型變量x,但是這兩個x所處的時間點不同,使得它們代表的數值也不一樣。等號右邊的x保存的是運算開始前的變量值,即2;而等號左邊的x保存的是運算結束后的數值,即9。所以前面的代碼看似代數方程式,其實表示的是一個存在時間先后概念的賦值語句。

就賦值語句“x=x+7”而言,盡管它從數學角度來看很是無理,可是在計算機編程中卻十分常見。該語句僅僅要求給某個整型變量加上若干數值,并未涉及其他變量,好比某人的背包里原本裝了3本書,然后往里面塞兩本書,最終背包一共裝了5本書。由于這種加法運算只對某個變量進行,因此Java又提供了“+=”運算符來簡化變量的自增操作,新運算符的使用示例如下:

// 對變量做加法運算后,假如相加之和仍然保存在原變量中,那么可按如下格式使用運算符“+=”
x += 7;  // 該行代碼等同于 x=x+7;
System.out.println("相加之和 x="+x);

既然有“+=”開了一個自增運算的頭,那么其他的四則運算以此類推,可分別演變出自減運算符“-=”、自乘運算符“*=”、自除運算符“/=”以及對變量自身取余數的運算符“%=”,相應的例子代碼如下(完整代碼見本章源碼的src\com\arithmetic\operator\Assign.java):

// 運算符“-=”的作用類似于“+=”,即把相減之差保存到原變量中
x -= 7;  // 該行代碼等同于 x=x-7;
System.out.println("相減之差 x="+x);
// 若要將相乘之積保存到原變量中,則可使用運算符“*=”
x *= 7;  // 該行代碼等同于 x=x*7;
System.out.println("相乘之積 x="+x);
// 若要將相除之商保存到原變量中,則可使用運算符“/=”
x /= 7;  // 該行代碼等同于 x=x/7;
System.out.println("相除之商 x="+x);
// 若要將相除之余數保存到原變量中,則可使用運算符“%=”
x %= 7;  // 該行代碼等同于 x=x%7;
System.out.println("相除之余數 x="+x);

推而廣之,凡是對變量自身開展某種基礎運算,然后運算結果又保存在該變量中,這些情況都適用于擴展了的賦值語句。譬如之前提到的按位左移操作符“<<”和按位右移操作符“>>”,均可演化出對應的自身左移運算符“<<=”和自身右移運算符“>>=”,這兩個運算符的演示代碼如下:

// 若要將按位左移結果保存到原變量中,則可使用運算符“<<=”
x <<= 2;  // 該行代碼等同于 x=x << 2;
System.out.println("x按位左移兩位="+x);
// 若要將按位右移結果保存到原變量中,則可使用運算符“>>=”
x >>= 2;  // 該行代碼等同于 x=x >> 2;
System.out.println("x按位右移兩位="+x);
主站蜘蛛池模板: 台南市| 葫芦岛市| 西乡县| 景泰县| 即墨市| 清远市| 聂荣县| 威远县| 雷山县| 社会| 宜兴市| 左贡县| 黄骅市| 富平县| 内黄县| 白水县| 常熟市| 翁源县| 钟祥市| 汽车| 泽普县| 五大连池市| 浮山县| 腾冲县| 黄浦区| 京山县| 广水市| 石渠县| 和硕县| 张家口市| 乡城县| 南京市| 淅川县| 子洲县| 南漳县| 泾源县| 抚远县| 新化县| 固安县| 台江县| 阳信县|