• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Java教程
    Java標識符與關鍵字
    Java變量
    Java數據類型
    Java運算符
    Java控制語句
    Java方法
    Java面向對象
    Java對象的創建和使用
    Java封裝
    Java中static和this
    Java繼承
    Java方法覆蓋和多態
    Java super
    Java基礎練習題

    Java賦值運算符

     

     

    賦值運算符目前也是只需要掌握=、+=、-=、*=、/=、%=,其它和二進制相關的內容也是到后面遇到的時候再詳細學習。賦值類的運算符包括基本賦值運算符(=)和擴展的賦值運算符(+=、-=、*=、/=、%=)。我們來看一段代碼:

     

    public class AssignmentOperatorTest01 {
    	public static void main(String[] args) {
    		//基本的賦值運算符
    		int i;
    		i = 10;
    		System.out.println("i = " + i);
    		i = 100;
    		System.out.println("i = " + i);
    		//擴展的賦值運算符
    		int x = 10;
    		x += 1; //等同于x = x + 1
    		System.out.println("x = " + x); //11
    		int y = 10;
    		y -= 1; //等同于y = y - 1
    		System.out.println("y = " + y); //9
    		int z = 10;
    		z *= 2; //等同于z = z * 2
    		System.out.println("z = " + z); //20
    		int m = 10;
    		m /= 3; //等同于m = m / 3
    		System.out.println("m = " + m); //3
    		int n = 10;
    		n %= 3; //等同于 n = n % 3
    		System.out.println("n = " + n); //1
    	}
    }

     

    x += 1和x = x + 1真的是完全相同嗎?我們來看下面的代碼:

     

    public class AssignmentOperatorTest02 {
    	
    	public static void main(String[] args) {
    		
    		byte b = 10;
    		
    		//以下程序編譯報錯,編譯器提示錯誤信息為:
    		//Type mismatch: cannot convert from int to byte
    		/*
    		 * 編譯沒有通過的原因:b是byte類型,1是int類型,根據之前講解的類型
    		 * 轉換規則得知,byte和int混合運算最后結果是int類型,int類型的值
    		 * 無法直接賦值給byte類型的變量b,所以編譯報錯。
    		 */
    		//b = b + 1; 
    		
    		b += 1; //編譯通過并可以正常運行
    		System.out.println("b = " + b); //11
    		//通過以上的測試得出:b = b + 1和b += 1是不一樣的
    		//那么b += 1等同于什么呢?
    		/*
    		 * 實際上java對于擴展類的賦值運算符進行了特殊的處理,所有
    		 * 的擴展賦值運算符,最終都不會改變運算的結果類型,假設前面
    		 * 的變量是byte類型,那么后面的表達式運算之后的結果還是byte
    		 * 類型。所以實際上b += 1等同于:
    		 */
    		b = (byte)(b + 1);
    		System.out.println("b = " + b); //12
    		
    		b += 1000; //編譯通過,并且可以正常運行
    		/*
    		 * 以上代碼實際上等同于:b = (byte)(b + 1000);
    		 * 分析得出,顯然結果已經超出了byte類型取值范圍,所以精度一定
    		 * 會損失,最終的結果需要對計算機二進制的原碼反碼補碼進行研究。
    		 */
    		System.out.println("b = " + b); //-12
    	}
    }

     

    根據以上代碼測試得出,對于擴展類的賦值運算符在運算的過程中不會改變運算的結果類型,也就是說byte b = 100; b += 1000;b變量最初是byte類型,最后的運算結果還是一個byte類型。這是一條固定的語法規則,大家記住就行了,以后在使用擴展類賦值運算符的時候要謹慎,不小心就會精度損失的。

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏