2015年6月29日 星期一

7 運算關係式Expression(1)

7     運算關係式Expression(1)
指定運算子(Assignment Operators)
指定運算子以等號 " = " 表示之。為將" = "符號右方之值設定給左方之欄位(變數)

class Assign1 {
  public static void main (String[] args) {
    int num1, lit1, asn1, sum1;

num1 = 20;
lit1= '';
System.out.println("數字 = "+num1);
System.out.println("文字 = "+lit1);

asn1 = lit1;
System.out.println("指定運算後之值 = "+asn1);

sum1 = num1 + lit1;
System.out.println("加法運算後之值 = "+sum1);
  }
}
執行結果:C:\js>java Assign1
數字 = 20
文字 = 24373
指定運算後之值 = 24373
加法運算後之值 = 24393




[賦值及賦址]
基本型別的指定運算,儲存的是實際數值(賦值)。物件的指定運算,儲存的是參考位址(賦址)。須注意下例兩者之不同,即指定運算後,更改一個物件之值,亦會影響另一物件。

class Objvr{
  int r = 10;
}

class Assignvr{
  public static void main(String[] args){
    //賦值運算(7-1)
    int a = 100;
    int b = 200;
    System.out.print("賦值1(指定運算複製前)");
    System.out.print("a = " + a);
    System.out.println("  b = " + b);
   
    a = b;         //指定運算(賦值)
    System.out.print("賦值2(指定運算複製後)");
    System.out.print("a = " + a);
    System.out.println("  b = " + b);
   
    a = 300;         //變更其一之值
    System.out.print("賦值3(變更其一之值後)");
    System.out.print("a = " + a);
    System.out.println("  b = " + b);
   
    //賦址運算(7-2)
    Objvr x = new Objvr();
    Objvr y = new Objvr();
    x.r = 400;
    y.r = 500;
    System.out.print("賦址1(指定運算複製前)");
    System.out.print("x.r = " + x.r);
    System.out.println("  y.r = " + y.r);
   


    x = y;         //指定運算(賦址)x.r = 500y.r = 500
System.out.print("賦址2(指定運算複製後)");
    System.out.print("x.r = " + x.r);
    System.out.println("  y.r = " + y.r);
   
    x.r = 600;      //只更改x.r之值,但位址相同,y.r亦同值
    System.out.print("賦址3(變更其一之值後)");
    System.out.print("x.r = " + x.r);
    System.out.println("  y.r = " + y.r);
  }
}

執行結果:C:\js>java Assignvr
賦值1(指定運算複製前)a = 100  b = 200
賦值2(指定運算複製後)a = 200  b = 200
賦值3(變更其一之值後)a = 300  b = 200
賦址1(指定運算複製前)x.r = 400  y.r = 500
賦址2(指定運算複製後)x.r = 500  y.r = 500
賦址3(變更其一之值後)x.r = 600  y.r = 600





算術運算子(Arithmetic Operators)
算術運算子:加法( + )、減法( - )、乘法( * )、除法( / )、求餘數( % )
class Arith1 {
  public static void main (String[] args) {

    int num1 = 50;
int num2 = 2;
int result1;

result1 = num1 + num2;
System.out.println("兩數相加 = "+ result1);

result1 = num1 - num2;
System.out.println("兩數相減 = "+ result1);

result1 = num1 * num2;
System.out.println("兩數相乘 = "+ result1);

result1 = num1 / num2;
System.out.println("兩數相除 = "+ result1);

result1 = num1 % num2;
System.out.println("餘數之值 = "+ result1);
}
}
執行結果:C:\js>java Arith1
兩數相加 = 52
兩數相減 = 48
兩數相乘 = 100
兩數相除 = 25
餘數之值 = 0





[複合等號]
等號兩邊為同一變數時,可省略等號右邊變數,並將右邊運算符號移至等號左邊,簡化如下:
a = a + b ; 可簡化為 a += b ;
a = a - b ; 可簡化為 a - = b ;
a = a * b ; 可簡化為 a *= b ;
a = a / b ; 可簡化為 a /= b ;
a = a % b ; 可簡化為 a %= b ;

class Comeq1 {
  public static void main (String[] args) {
    int num1 = 50;
    int num2 = 2;
   
    num1 += num2;
    System.out.println("兩數相加 = " +  num1);
   
    num1 -= num2;
    System.out.println("兩數相減 = " +  num1);
      
    num1 *= num2;
    System.out.println("兩數相乘 = " +  num1);
      
    num1 /= num2;
    System.out.println("兩數相除 = " +  num1);
   
    num1 +=1;  
    num1 %= num2;
    System.out.println("餘數之值 = " +  num1);
  }
}
執行結果:C:\js>java Comeq1
兩數相加 = 52
兩數相減 = 50
兩數相乘 = 100
兩數相除 = 50
餘數之值 = 1
一元運算子(Unary Operators)
一元運算子包含證號(+)和負號(-),負號為取得運算元的負值,正號沒有影響。

class Unary1{
public static void main (String[] args) {
int a = 10 , b = 20;
int x , y;
x = -a;  //x的值為-10
    System.out.println("x = " + x);

x = a * -b;  //x = a * (-b);
y = +x;    //正號沒有影響
System.out.println("y = " + y);
}
}

執行結果:C:\js>java Unary1
x = -10
y = -200


遞增/遞減運算子(Increment/Decrement Operators)
前置式:執行時加一或減一          ++a- -a
後置式:執行後加一或減一          a++a- -
class Incre1 {
public static void main (String[] args) {
int num1, num2, num3, num4;

    num1 = 10;
    System.out.println("前置遞增 num1 = "+ ++ num1);

    num2 = 10;
    System.out.println("後置遞增 num2 = "+ num2++);
    System.out.println("後置遞增 num2 = "+ num2);

    num3 = 10;
    System.out.println("前置遞減 num3 = "+ -- num3);

    num4 = 10;
    System.out.println("後置遞減 num4 = "+ num4--);
    System.out.println("後置遞減 num4 = "+ num4);
}
}
執行結果:C:\js>java Incre1
前置遞增 num1 = 11
後置遞增 num2 = 10
後置遞增 num2 = 11
前置遞減 num3 = 9
後置遞減 num4 = 10
後置遞減 num4 = 9



比較運算子(Compare Operators)
比較運算子:等於( = = )、不等於( ! = )、大於( > )、小於( < )、大於等於( > = )
         小於等於( < = )
比較運算子運算結果為true()false()

class Compare1 {
public static void main (String[] args) {
int num1 = 3, num2 = 2;

System.out.println("測試 (num1 == num2) = " + (num1==num2));
System.out.println("測試 (num1 != num2) = " + (num1 != num2));
System.out.println("測試 (num1 > num2) = " + (num1 > num2));
System.out.println("測試 (num1 < num2) = " + (num1 < num2));
System.out.println("測試 (num1 >= num2) = " + (num1 >= num2));
System.out.println("測試 (num1 <= num2) = " + (num1 <= num2));
}
}
執行結果:C:\js>java Compare1
測試 (num1 == num2) = false
測試 (num1 != num2) = true
測試 (num1 > num2) = true
測試 (num1 < num2) = false
測試 (num1 >= num2) = true
測試 (num1 <= num2) = false




*參考型別(物件)之相等性測試將闢另章說明。

沒有留言:

張貼留言