Java開發筆記(九)賦值運算符及其演化

前面的加減乘除四則運算,計算結果經過等號輸出給指定變量,注意此時代碼把變量放到等號左邊。而在算術課本里,加法運算的完整寫法相似於「1+1=2」這樣,運算結果應該跟在等號右邊。不過代數課本里的方程式存在「x=y+1」的寫法,表示等號兩邊的結果數值是同樣的,所以變量放在等號左邊也是能夠理解的。然而Java編程裏的「=」並不是數學上的相等涵義,而是一種賦值操做,所謂「賦值」,指的是將某一數值賦給某個變量的過程。計算機程序在運行的時候,無論操做什麼類型的數據,都要有處地方保存運算先後的數值。變量在參與計算的時候,它可能存在多種身份,當變量做爲運算過程的操做數之時,它保存的是運算前的數值;當變量做爲運算結果的輸出數之時,它保存的是運算後的數值。故而等號兩邊同時出現某個變量是徹底正常的,就像下面代碼演示的那樣: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」而言,儘管它從數學角度來看非常無理,但是在計算機編程中卻十分常見。該語句僅僅要求給某個整型變量加上若干數值,並未涉及到其它別的什麼變量,比如某人的揹包裏本來裝了三本書,而後往裏面塞兩本書,最終揹包一共裝了五本書。因爲這種加法運算只對某個變量進行,所以Java又提供了「+=」運算符來簡化變量的自增操做,新運算符的使用代碼示例以下:blog

		// 對變量進行加法運算後,假如相加之和仍然保存在原變量,那麼可按以下格式使用運算符「+=」
		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 %= 7; // 該行代碼等同於 x = x%7;
		System.out.println("相除之餘 x="+x);

 

推而廣之,凡是對變量自身進行某種基礎運算,而後運算結果又保存在該變量中,這些狀況都適用於擴展了的賦值語句。譬如以前提到的按位左移操做符<<、按位右移操做符>>,都可演化出對應的自身左移運算符「<<=」,以及自身右移運算符「>>=」,這兩個運算符的演示代碼以下:class

		// 若要將按位左移結果保存到原變量中,則可以使用運算符「<<=」
		x <<= 2; // 該行代碼等同於 x = x << 2;
		System.out.println("x按位左移兩位="+x);
		// 若要將按位右移結果保存到原變量中,則可以使用運算符「>>=」
		x >>= 2; // 該行代碼等同於 x = x >> 2;
		System.out.println("x按位右移兩位="+x);
相關文章
相關標籤/搜索