Java演算子

コンピュータの最も基本的な用途の1つは、数学の演算を実行することです。Javaは、コンピュータ言語として、変数を操作するための豊富な演算子セットも提供します。 演算子は次のいくつかの種類に分けられます。

  • 算術演算子
  • 関係演算子
  • ビット演算子
  • 論理演算子
  • 代入演算子
  • その他の演算子

算術演算子

算術演算子は数式で使用され、その関数は数学と同じです。 次のテーブルには、すべての算術演算子を示します。

テーブルの実例では、整数変数Aの値が10で、変数Bの値が20であると想定しています。

演算子説明実例
+加算-演算子の両側のオペランドを加算しますA + B = 30
減算-左側のオペランドが右側のオペランドを減算しますA – B = -10
*乗算-演算子の両側の値を乗算しますA * B=200
/除算-左側のオペランドが右側のオペランドを除算しますB / A=2
余り-左側のオペランドが右側のオペランドを除算した余りですB%A=0
++インクリメント:オペランドが1ずつ増加しますB++または++Bは21に等しい(違いについては下記を参照してください)
デクリメント:オペランドが1減少しますB–または–Bは19に等しい(違いについては下記を参照してください)

実例

下記のプログラムでは、算術演算子を示しています。 次のJavaプログルラムを貼り付けて、Test.javaファイルとして保存してから、このプログラムをコンパイルして実行します。

public class Test {
 
  public static void main(String[] args) {
     int a = 10;
     int b = 20;
     int c = 25;
     int d = 25;
     System.out.println("a + b = " + (a + b) );
     System.out.println("a - b = " + (a - b) );
     System.out.println("a * b = " + (a * b) );
     System.out.println("b / a = " + (b / a) );
     System.out.println("b % a = " + (b % a) );
     System.out.println("c % a = " + (c % a) );
     System.out.println("a++   = " +  (a++) );
     System.out.println("a--   = " +  (a--) );
     // d++と++dの違いを確認します
     System.out.println("d++   = " +  (d++) );
     System.out.println("++d   = " +  (++d) );
  }
}

上記の実例をコンパイルして実行した結果は次のとおりです。

a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5
a++   = 10
a--   = 11
d++   = 25
++d   = 27

インクリメントおよびデクリメント演算子

1、インクリメント(++)およびデクリメント(-)演算子は、特別な算術演算子です。算術演算子では、操作を実行するために2つのオペランドが必要であり、インクリメントおよびデクリメント演算子はオペランドです。

実例

public class selfAddMinus{
    public static void main(String[] args){
        int a = 3;//変数を定義します;
        int b = ++a;//インクリメント演算
        int c = 3;
        int d = --c;//デクリメント演算
        System.out.println("インクリメント演算した後の値="+b);
        System.out.println("デクリメント演算した後の値="+d);
    }
}

実行した結果は:

インクリメント演算した後の値=4
デクリメント演算した後の値=2
  • int b = ++a; 操作過程の各ステップは: a=a+1=4; b=a=4, 最後の結果はb=4,a=4
  • int d = –c; 操作過程の各ステップは: c=c-1=2; d=c=2, 最後の結果はd=2,c=2

2、プレフィックスのインクリメントおよびデクリメント(++a,–a):最初にインクリメントまたはデクリメント操作を実行し、また式操作を実行します。

3、サフィックスのインクリメントおよびデクリメント(a++,a–):最初に式の操作を実行し、またインクリメントおよびデクリメント操作を実行します。例えば:

public class selfAddMinus{
    public static void main(String[] args){
        int a = 5;//変数を定義します;
        int b = 5;
        int x = 2*++a;
        int y = 2*b++;
        System.out.println("インクリメント演算子プレフィックスが操作した後a="+a+",x="+x);
        System.out.println("インクリメント演算子のサフィックスが演算した後b="+b+",y="+y);
    }
}

実行した結果は:

インクリメント演算子プレフィックスが操作した後a=6,x=12
インクリメント演算子のサフィックスが演算した後b=6,y=10

関係演算子

次のテーブルには、Javaがサポートしている関係演算子を示しています。

テーブルでは、整数変数Aの値は10で、変数Bの値は20です。

演算子説明実例
==2つのオペランドの値が等しいであるかどうかを確認します。等しい場合は、条件がtrueになります。(A == B)はfalseです。
!=2つのオペランドの値が等しいであるかどうかを確認します。等しくない場合は、条件がtrueになります。(A != B) はtrueです。
>左側のオペランドの値が右側のオペランドの値よりも大きいであるかどうかを確認します。大きい場合は、条件がtrueになります。(A> B)はfalseです。
<左側のオペランドの値が右側のオペランドの値よりも小さいであるかどうかを確認します。小さい場合は、条件がtrueになります。(A <B)はtrueです。
>=左側のオペランドの値が右側のオペランドの値以上であるかどうかを確認します。以上である場合は、条件がtrueになります。(A> = B)はfalseです。
<=左側のオペランドの値が右側のオペランドの値以下であるかどうかを確認します。以下である場合は、条件がtrueになります。(A <= B)はtrueです。

実例

次には簡単な関係演算子の実例を挙げます。下記のJavaプログラムを貼り付けて、Test.javaファイルとして保存してから、このプログラムをコンパイルして実行します。

Test.java ファイルコード:

public class Test {
 
  public static void main(String[] args) {
     int a = 10;
     int b = 20;
     System.out.println("a == b = " + (a == b) );
     System.out.println("a != b = " + (a != b) );
     System.out.println("a > b = " + (a > b) );
     System.out.println("a < b = " + (a < b) );
     System.out.println("b >= a = " + (b >= a) );
     System.out.println("b <= a = " + (b <= a) );
  }
}

上記の実例をコンパイルして実行した結果は次のとおりです。

a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false

ビット演算子

Javaはビット演算子を定義し、整数型(int)、長整数(long)、短整数(short)、文字型(char)、およびバイト型(byte)に適用されます。

ビット演算子はすべてのビットに作用し、ビット単位で演算を実行します。 a = 60,b = 13と仮定すると、バイナリ形式での表現は次のようになります。

A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011

次のテーブルには、整数変数Aの値が60で、変数Bの値が13であると仮定した場合、ビット演算子の基本的な操作を示します。

演算子説明実例
対応するビットがすべて1の場合、結果は1になり、それ以外の場合は0になります。(A&B)、12を取得します。つまり0000 1100です。
|対応するビットがすべて0の場合、結果は0になり、それ以外の場合は1になります。(A | B)は61を取得します。つまり 0011 1101です。
^対応するビット値が同じの場合、結果は0になり、それ以外の場合は1になります。(A ^ B)は49を取得します。つまり0011 0001です。
ビット単位否定演算子は、オペランドの各ビットを反転します。つまり、0は1になり、1は0になります。(〜A)は-61を取得します。つまり1100 0011です。
<<左シフト演算子。 左側のオペランドは、右側のオペランドで指定されたビット数だけ左にシフトされます。A << 2は240を取得します。つまり 1111 0000です。
>>右シフト演算子。左側のオペランドは、右側のオペランドで指定されたビット数だけ右にシフトされます。A >> 2は15を取得します。つまり 1111です。
>>>ビット符号なし右シフト演算子。 左側のオペランドの値は、右側のオペランドで指定されたビット数だけ右にシフトされ、シフトによって得られたスペースはゼロで埋められます。A>>>2は15を取得します。つまり0000 1111です。

実例

次の簡単な実例では、ビット演算子を示しています。下記のJavaプログラムを貼り付け、Test.javaファイルとして保存してから、このプログラムをコンパイルして実行します。

Test.java ファイルコード:

public class Test {
  public static void main(String[] args) {
     int a = 60; /* 60 = 0011 1100 */ 
     int b = 13; /* 13 = 0000 1101 */
     int c = 0;
     c = a & b;       /* 12 = 0000 1100 */
     System.out.println("a & b = " + c );
 
     c = a | b;       /* 61 = 0011 1101 */
     System.out.println("a | b = " + c );
 
     c = a ^ b;       /* 49 = 0011 0001 */
     System.out.println("a ^ b = " + c );
 
     c = ~a;          /*-61 = 1100 0011 */
     System.out.println("~a = " + c );
 
     c = a << 2;     /* 240 = 1111 0000 */
     System.out.println("a << 2 = " + c );
 
     c = a >> 2;     /* 15 = 1111 */
     System.out.println("a >> 2  = " + c );
  
     c = a >>> 2;     /* 15 = 0000 1111 */
     System.out.println("a >>> 2 = " + c );
  }
} 

上記の実例をコンパイルして実行した結果は次のとおりです。

a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2  = 15
a >>> 2 = 15

論理演算子

次のテーブルには論理演算子の基本操作を示します。仮にブール変数Aがtrueで、変数Bがfalseです。

演算子説明実例
&&論理積演算子と呼ばれます。 両方のオペランドがtrueである場合にのみ、条件はtrueになります。(A && B)はfalseです。
| |論理和演算子と呼ばれます。2つのオペランドのいずれかがtrueの場合、条件はtrueになります。(A||B)はtrueです。
論理否定演算子と呼ばれます。 オペランドの論理状態を逆にするために使用されます。 条件がtrueの場合、論理否定演算子はfalseを取得します。!(A && B)はtrueです。

実例

次の簡単な実例には、論理演算子を示しています。 次のJavaプログラムを貼り付け、Test.javaファイルとして保存してから、このプログラムをコンパイルして実行します。

public class Test {
  public static void main(String[] args) {
     boolean a = true;
     boolean b = false;
     System.out.println("a && b = " + (a&&b));
     System.out.println("a || b = " + (a||b) );
     System.out.println("!(a && b) = " + !(a && b));
  }
}

上記の実例をコンパイルして実行した結果は次のとおりです。

a && b = false
a || b = true
!(a && b) = true

短絡評価演算子

AND論理演算子を使用する場合、両方のオペランドがtrueの場合、結果はtrueになりますが、最初の演算がfalseの場合、結果はfalseである必要があり、この時点では2番目の演算は評価されません。 両方がtrueの場合、結果はtrueですが、最初の操作がfalseの場合、結果はfalseであるため、2番目の操作はこの時点では評価されません。

実例

public class LuoJi{
    public static void main(String[] args){
        int a = 5;//変数を定義します;
        boolean b = (a<4)&&(a++<10);
        System.out.println("短絡評価演算子を使用した結果は"+b);
        System.out.println("aの結果は"+a);
    }
}

実行した:

短絡評価演算子を使用した結果はfalse
aの結果は5

解析このプログラムには短絡評価演算子(&&)を使用し、最初にa <4の結果をfalseと評価し、bの結果をfalseにする必要があるため、2番目の演算a++<10 は実行されなくなり、 aの値は5です

代入演算子

下記のは、Java言語でサポートされている代入演算子です。

演算子説明実例
=基礎的な代入演算子。右側のオペランドの値を左側のオペランドに代入します。C = A + Bは、A + Bによって取得された値をCに割り当てます
+=加算値を代入する演算子。左側のオペランドと右側のオペランドを加算し、左側のオペランドに値を割り当てます。C + = AはC = C + Aに相当します
-=減算値を代入する演算子。左側のオペランドと右側のオペランドを減算し、左側のオペランドに値を割り当てます。C – = AにC = C – Aに相当します
*=乗算値を代入する演算子。左側のオペランドと右側のオペランドを乗算し、左側のオペランドに値を割り当てます。C * = AはC = C * Aに相当します
/=除算値を代入する演算子。左側のオペランドと右側のオペランドを除算し、左側のオペランドに値を割り当てます。C / = Aでは、C が A と同じ種類である場合、 C = C / Aに相当します
(%)=モジュールと代入演算子です。左側のオペランドと右側のオペランドを取り、モジュールを取った後、それをオペランドに割り当てます。C%= AはC = C%Aに相当します
<<=左シフトした値を代入する演算子C << = 2はC = C << 2に相当します
>>=右左シフトした値を代入する演算子C >> = 2はC = C >> 2に相当します
&=ビット論理積 (AND) の値を代入する演算子C&= 2はC = C&2に相当します
^ =ビット排他的論理和 (XOR) の値を代入する演算子C ^ = 2はC = C ^ 2に相当します
|=ビット論理和 (OR) の値を代入する演算子C | = 2はC = C | 2に相当します

実例

次の簡単な実例では、代入演算子を示しています。 次のJavaプログラムを貼り付けて、Test.javaファイルとして保存してから、このプログラムをコンパイルして実行します。

Test.java ファイルコード:

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 0;
        c = a + b;
        System.out.println("c = a + b = " + c );
        c += a ;
        System.out.println("c += a  = " + c );
        c -= a ;
        System.out.println("c -= a = " + c );
        c *= a ;
        System.out.println("c *= a = " + c );
        a = 10;
        c = 15;
        c /= a ;
        System.out.println("c /= a = " + c );
        a = 10;
        c = 15;
        c %= a ;
        System.out.println("c %= a  = " + c );
        c <<= 2 ;
        System.out.println("c <<= 2 = " + c );
        c >>= 2 ;
        System.out.println("c >>= 2 = " + c );
        c >>= 2 ;
        System.out.println("c >>= 2 = " + c );
        c &= a ;
        System.out.println("c &= a  = " + c );
        c ^= a ;
        System.out.println("c ^= a   = " + c );
        c |= a ;
        System.out.println("c |= a   = " + c );
    }
}

上記の実例をコンパイルして実行した結果は次のとおりです。

c = a + b = 30
c += a  = 40
c -= a = 30
c *= a = 300
c /= a = 1
c %= a  = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= 2 = 1
c &= a  = 0
c ^= a   = 10
c |= a   = 10

条件演算子(?:)

条件演算子は、三項演算子とも呼ばれます。 この演算子には3つのオペランドがあり、ブール式の値を決定する必要があります。この演算子は主に、変数に割り当てる値を決定しです。

variable x = (expression) ? value if true : value if false

実例

Test.java ファイルコード:

public class Test {
   public static void main(String[] args){
      int a , b;
      a = 10;
      // aが1に等しい場合は、bを20に設定します。それ以外の場合は、 30
      b = (a == 1) ? 20 : 30;
      System.out.println( "Value of b is : " +  b );
 
      // aが10に等しい場合は、bを20に設定します。それ以外の場合は、 30
      b = (a == 10) ? 20 : 30;
      System.out.println( "Value of b is : " + b );
   }
}

上記の実例をコンパイルして実行した結果は次のとおりです。

Value of b is : 30
Value of b is : 20

関係演算子

この演算子は、オブジェクトインスタンスを操作し、オブジェクトが特定の型(クラスの型またはインターフェイスの型)であるかどうかを確認するために使用されます。

関係演算子の構文は次のとおりです。

(Object reference variable) instanceof  (class/interface type)

演算子の左側の変数が指すオブジェクトで、演算子の右側のクラスまたはインターフェイス(class/interface)のオブジェクトである場合、結果はtrueになります。

次には例を挙げます。

String name = "James";
boolean result = name instanceof String; // nameはString型であるため、trueを返します

比較されたオブジェクトが右側の型と互換性があっても、演算子はtrueを返します。

次の例をご覧ください。

class Vehicle {}
 
public class Car extends Vehicle {
   public static void main(String[] args){
      Vehicle a = new Car();
      boolean result =  a instanceof Car;
      System.out.println( result);
   }
}

上記の実例をコンパイルして実行した結果は次のとおりです。

true

Java演算子の優先順位

複数の演算子が式に表示されたら、優先順位が必要です。複数の演算子がある式では、演算子の優先順位の違いによって、答えにも大きな差を導きます。

例えば、(1+3)+(3+2)*2では、+を優先すれば、答えは18ですが、を優先すれば、答えは14です。

x = 7 + 3 * 2では、乗算演算子は加算演算子よりも優先度が高いため、xが20ではなく、13になります。そのため、最初に3 * 2を計算して6を取得し、また7を加算します。

次のテーブルで優先度が最も高い演算子がテーブルの一番上にあり、優先度が最も低い演算子がデーブルの一番下にあります。

種類演算子関連性
サフィックス() [] . (点)左から右
単項expr++ expr–左から右
単項++expr –expr + – ~ !右から左
乗算*/%左から右
加算+-左から右
ビットシフト>> >>> << 左から右
関係>> = < <=左から右
等値== !=左から右
ビット論理積 (AND)左から右
ビット排他的論理和 (XOR)^左から右
ビット論理和 (OR)|左から右
論理積 (AND)&&左から右
論理和 (OR)| |左から右
条件?:右から左
代入= + = – =*= / =%= >>= << =&= ^ =| =右から左
カンマ左から右
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です