Java には、必要に応じて使用できる多くの種類の演算子が用意されています。これらは、提供する機能に基づいて分類されています。この記事では、Java オペレーターについて学び、そのすべてのタイプを学習します。
Java オペレーターとは何ですか?
Java の演算子は、Java で特定の操作を実行するために使用される記号です。演算子は、加算や乗算などのタスクを作成します。これらのタスクの実装は非常に複雑ですが、簡単に見えます。
Java の演算子の種類
Java には複数の種類の演算子があり、すべてを以下に示します。
1. 算術演算子
これらは、プリミティブ データ型に対して単純な算術演算を実行するために使用されます。
- * : 乗算
- / : 分割
- %: モジュール
- + : 追加
- – : 引き算
例:
ジャワ
// Java Program to implement // Arithmetic Operators import java.io.*; // Drive Class class GFG { // Main Function public static void main (String[] args) { // Arithmetic operators int a = 10; int b = 3; 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('a % b = ' + (a % b)); } }>
出力
a + b = 13 a - b = 7 a * b = 30 a / b = 3 a % b = 1>
2. 単項演算子
単項演算子に必要なオペランドは 1 つだけです。これらは、値を増加、減少、または否定するために使用されます。
- – : 単項マイナス 、値を否定するために使用されます。
- + : 単項プラス は正の値を示します (ただし、これがなければ数値は正になります)。オペランドの型が byte、char、または short の場合、int への自動変換が実行されます。これは単項数値昇格と呼ばれます。
- ++: インクリメント演算子 、値を 1 ずつインクリメントするために使用されます。インクリメント演算子には 2 種類あります。
- ポストインクリメント: 値は最初に結果の計算に使用され、次に増分されます。
- 事前増分: 最初に値がインクリメントされてから、結果が計算されます。
- – – : デクリメント演算子 、値を 1 減らすために使用されます。減分演算子には 2 種類あります。
- ポストデクリメント: 値は最初に結果の計算に使用され、その後減分されます。
- プリデクリメント: 値 最初に減分されてから結果が計算されます。
- ! : 論理否定演算子 、ブール値を反転するために使用されます。
例:
ジャワ // Java Program to implement // Unary Operators import java.io.*; // Driver Class class GFG { // main function public static void main(String[] args) { // Interger declared int a = 10; int b = 10; // Using unary operators System.out.println('Postincrement : ' + (a++)); System.out.println('Preincrement : ' + (++a)); System.out.println('Postdecrement : ' + (b--)); System.out.println('Predecrement : ' + (--b)); } }>
出力
Postincrement : 10 Preincrement : 12 Postdecrement : 10 Predecrement : 8>
3. 代入演算子
「=」 代入演算子は、任意の変数に値を代入するために使用されます。これには右から左への結合性があります。つまり、演算子の右側で指定された値が左側の変数に割り当てられるため、右側の値は使用する前に宣言するか、定数にする必要があります。
代入演算子の一般的な形式は次のとおりです。
variable = value;>
多くの場合、代入演算子を他の演算子と組み合わせて、 複合ステートメント 。たとえば、の代わりに、 = a+5、次のように書くことができます += 5.
- += 、左側のオペランドと右側のオペランドを加算し、それを左側の変数に代入します。
- -= 、左のオペランドから右のオペランドを減算し、それを左側の変数に代入します。
- *= 、左のオペランドと右のオペランドを乗算し、それを左側の変数に代入します。
- /= 、左のオペランドを右のオペランドで除算し、それを左側の変数に代入します。
- %= 、左オペランドのモジュロを右オペランドで代入し、それを左の変数に代入します。
例:
ジャワ // Java Program to implement // Assignment Operators import java.io.*; // Driver Class class GFG { // Main Function public static void main(String[] args) = 0b1100: ' + (f }>
出力
f += 3: 10 f -= 2: 8 f *= 4: 32 f /= 3: 10 f %= 2: 0 f &= 0b1010: 0 f |= 0b1100: 12 f ^= 0b1010: 6 f <>= 1: 12 f>>>= 1: 6>>>4. 関係演算子
これらの演算子は、等しい、より大きい、より小さいなどの関係をチェックするために使用されます。これらは比較後にブール値の結果を返し、ループ ステートメントや条件付きの if-else ステートメントで広く使用されます。一般的な形式は次のとおりです。
関係演算子の一部は次のとおりです。
- ==、等しい 左辺が右辺と等しい場合に true を返します。
- !=、等しくない 左辺が右辺と等しくない場合に true を返します。
- <、未満: 左辺が右辺より小さい場合は true を返します。
- <=、以下 左辺が右辺以下の場合に true を返します。
- >、次より大きい: 左辺が右辺より大きい場合は true を返します。
- >=、以上 左辺が右辺以上の場合に true を返します。
例:
ジャワ
// Java Program to implement // Relational Operators import java.io.*; // Driver Class class GFG { // main function public static void main(String[] args) { // Comparison operators int a = 10; int b = 3; int c = 5; System.out.println('a>b: ' + (a> b)); System.out.println('a + (a< b)); System.out.println('a>= b: ' + (a>= b)); System.out.println('a<= b: ' + (a <= b)); System.out.println('a == c: ' + (a == c)); System.out.println('a != c: ' + (a != c)); } }>
出力a>b: 真 a = b: 真 a<= b: false a == c: false a != c: true>5. 論理演算子
これらの演算子は、論理 AND および論理 OR 演算、つまりデジタル電子機器の AND ゲートおよび OR ゲートと同様の機能を実行するために使用されます。留意すべき点の 1 つは、最初の条件が false の場合、2 番目の条件は評価されないことです。つまり、短絡効果があるということです。意思決定を行うためのいくつかの条件をテストするために広く使用されます。 Java には論理 NOT もあり、条件が false の場合は true を返し、その逆の場合は true を返します。
条件演算子は次のとおりです。
Javaで文字列を整数に変換する方法
- &&、論理積: 両方の条件が true の場合に true を返します。
- ||、論理和: 少なくとも 1 つの条件が true の場合に true を返します。
- !、論理否定: 条件が false の場合は true を返し、その逆の場合も同様です
例:
ジャワ
// Java Program to implemenet // Logical operators import java.io.*; // Driver Class class GFG { // Main Function public static void main (String[] args) }>
出力x && y: false x || y: true !x: false>6. 三項演算子
三項演算子は、if-else ステートメントの短縮版です。 3 つのオペランドがあるため、Ternary という名前が付けられています。
一般的な形式は次のとおりです。
condition ? if true : if false>上記のステートメントは、条件が true と評価された場合、「?」の後のステートメントを実行し、それ以外の場合は「:」の後のステートメントを実行することを意味します。
例:
ジャワ
// Java program to illustrate // max of three numbers using // ternary operator. public class operators { public static void main(String[] args) { int a = 20, b = 10, c = 30, result; // result holds max of three // numbers result = ((a>b)? (a> c) ? a : c : (b> c) ? b:c); System.out.println('3 つの数値の最大値 = ' + 結果); } }>>
出力Max of three numbers = 30>7. ビット演算子
これらの演算子は、数値の個々のビットの操作を実行するために使用されます。これらは、任意の整数型とともに使用できます。これらは、バイナリ インデックス付きツリーの更新およびクエリ操作を実行するときに使用されます。
ジャワ
- &、ビット単位の AND 演算子: 入力値のビットごとの AND を返します。
- |、ビットごとの OR 演算子: 入力値のビットごとの OR を返します。
- ^、ビットごとの XOR 演算子: 入力値のビットごとの XOR を返します。
- ~、ビットごとの補数演算子: これは、入力値の 1 の補数表現、つまりすべてのビットを反転した値を返す単項演算子です。
// Java Program to implement // bitwise operators import java.io.*; // Driver class class GFG { // main function public static void main(String[] args) // Bitwise operators int d = 0b1010; int e = 0b1100; System.out.println('d & e: ' + (d & e)); System.out.println('d }>
出力d & e: 8 d | e: 14 d ^ e: 6 ~d: -11 d <>1:6 と>>> 1:6>>>8. シフト演算子
これらの演算子は、数値のビットを左または右にシフトし、それによって数値をそれぞれ 2 で乗算または除算するために使用されます。これらは、数値を 2 で乗算または除算する必要がある場合に使用できます。一般的な形式 -
<<、左シフト演算子: 数値のビットを左にシフトし、結果として残った空白部分に 0 を埋めます。数値に 2 の累乗を乗算するのと同様の効果。 >>、符号付き右シフト演算子: 数値のビットを右にシフトし、結果として左側の空白部分に 0 を埋めます。左端のビットは、最初の数値の符号によって異なります。数値を 2 の累乗で割る場合と同様の効果があります。 >>>、符号なし右シフト演算子: 数値のビットを右にシフトし、結果として左側の空白部分に 0 を埋めます。左端のビットは 0 に設定されます。 ジャワ
// Java Program to implement // shift operators import java.io.*; // Driver Class class GFG { // main function public static void main(String[] args) { int a = 10; // using left shift System.out.println('a<<1 : ' + (a << 1)); // using right shift System.out.println('a>>1 : ' + (a>> 1)); } }>>
出力a<<1 : 20 a>>1 : 5>>9.instanceof演算子
演算子のインスタンスは型チェックに使用されます。これは、オブジェクトがクラス、サブクラス、またはインターフェイスのインスタンスであるかどうかをテストするために使用できます。一般的な形式 -
object instance of class/subclass/interface>ジャワ
// Java program to illustrate // instance of operator class operators { public static void main(String[] args) { Person obj1 = new Person(); Person obj2 = new Boy(); // As obj is of type person, it is not an // instance of Boy or interface System.out.println('obj1 instanceof Person: ' + (obj1 instanceof Person)); System.out.println('obj1 instanceof Boy: ' + (obj1 instanceof Boy)); System.out.println('obj1 instanceof MyInterface: ' + (obj1 instanceof MyInterface)); // Since obj2 is of type boy, // whose parent class is person // and it implements the interface Myinterface // it is instance of all of these classes System.out.println('obj2 instanceof Person: ' + (obj2 instanceof Person)); System.out.println('obj2 instanceof Boy: ' + (obj2 instanceof Boy)); System.out.println('obj2 instanceof MyInterface: ' + (obj2 instanceof MyInterface)); } } class Person { } class Boy extends Person implements MyInterface { } interface MyInterface { }>
出力obj1 instanceof Person: true obj1 instanceof Boy: false obj1 instanceof MyInterface: false obj2 instanceof Person: true obj2 instanceof Boy: true obj2 instanceof MyInterface: true>Java 演算子の優先順位と結合性
優先順位と結合ルールは、複数のタイプの演算子が関与するハイブリッド方程式を処理するときに使用されます。このような場合、同じ方程式に対してさまざまな評価が存在する可能性があるため、これらのルールによって方程式のどの部分を最初に考慮するかが決まります。以下の表は、演算子の優先順位を大きさとして降順に示しており、上が最も高い優先順位を表し、下が最も低い優先順位を示しています。
Java オペレーターに関する興味深い質問
1. 優先順位と結合性:
複数の演算子を含む方程式であるハイブリッド方程式に関しては、しばしば混乱が生じます。問題はどの部分を最初に解決するかです。このような状況では従うべき黄金律があります。演算子の優先順位が異なる場合は、優先順位の高い方から解決してください。優先順位が同じ場合は、結合に従って、つまり右から左または左から右のいずれかで解決します。以下のプログラムの説明は、プログラム自体のコメントに詳しく書かれています。
ジャワ
public class operators { public static void main(String[] args) { int a = 20, b = 10, c = 0, d = 20, e = 40, f = 30; // precedence rules for arithmetic operators. // (* = / = %)>(+ = -) // a+(b/d) を出力します System.out.println('a+b/d = ' + (a + b / d)); // 優先順位が同じ場合、 // 結合ルールに従います。 // e/f -> b*d -> a+(b*d) -> a+(b*d)-(e/f) System.out.println('a+b*d-e/f = ' + (a + b * d - e / f)); } }>>
出力a+b/d = 20 a+b*d-e/f = 219>2. コンパイラになる:
私たちのシステムのコンパイラは、トークンの生成時に lex ツールを使用して最大一致を照合します。これを無視すると、ちょっとした問題が発生します。たとえば、次のステートメントを考えてみましょう a=b+++c ;読者が多すぎるとコンパイラ エラーが発生するように見えるかもしれません。しかし、lex によって作成されたトークンは a、=、b、++、+、c であるため、このステートメントは完全に正しいです。したがって、このステートメントには、最初に b+c を a に代入し、次に b をインクリメントするのと同様の効果があります。同様に、a=b+++++c;生成されるトークンは a、=、b、++、++、+、c であるため、エラーが生成されます。 2 番目の単項オペランドの後にオペランドがないため、これは実際にはエラーです。
ジャワ
public class operators { public static void main(String[] args) { int a = 20, b = 10, c = 0; // a=b+++c is compiled as // b++ +c // a=b+c then b=b+1 a = b++ + c; System.out.println('Value of a(b+c), ' + ' b(b+1), c = ' + a + ', ' + b + ', ' + c); // a=b+++++c is compiled as // b++ ++ +c // which gives error. // a=b+++++c; // System.out.println(b+++++c); } }>
出力Value of a(b+c), b(b+1), c = 10, 11, 0>3. () の上に + を使用する:
内部で + 演算子を使用する場合 system.out.println() 必ず括弧を使用して加算を行ってください。加算を行う前に何かを記述すると、文字列の加算が行われます。つまり、加算の結合性は左から右であるため、最初に整数が文字列に加算されて文字列が生成され、+ を使用すると文字列オブジェクトが連結されます。したがって、望ましくない結果が生じる可能性があります。
ジャワ
public class operators { public static void main(String[] args) { int x = 5, y = 8; // concatenates x and y as // first x is added to 'concatenation (x+y) = ' // producing 'concatenation (x+y) = 5' // and then 8 is further concatenated. System.out.println('Concatenation (x+y)= ' + x + y); // addition of x and y System.out.println('Addition (x+y) = ' + (x + y)); } }>
出力Concatenation (x+y)= 58 Addition (x+y) = 13>Java の演算子の利点
Java で演算子を使用する利点は次のとおりです。
- 表現力 : Java の演算子は、複雑な計算や論理演算を実行するための簡潔で読みやすい方法を提供します。
- 時間の節約: Java のオペレーターは、特定のタスクの実行に必要なコードの量を減らすことで時間を節約します。
- パフォーマンスを向上させた : 演算子を使用すると、多くの場合ハードウェア レベルで実装され、同等の Java コードよりも高速になるため、パフォーマンスを向上させることができます。
Java の演算子の欠点
Java の Operator の欠点を以下に示します。
- 演算子の優先順位: Java の演算子には定義された優先順位があり、適切に使用しないと予期しない結果が生じる可能性があります。
- 型強制 注: Java は演算子を使用するときに暗黙的な型変換を実行するため、適切に使用しないと予期しない結果やエラーが発生する可能性があります。
Java オペレーターに関する FAQ
1. Java の演算子とは何ですか? 例を示します。
演算子は、特定の操作を実行するために使用される特別な記号です。たとえば、「+」は加算に使用され、5+4 は値 9 を返します。
int から文字列 Java へ