Javaの単一演算子

OTUSは明日、新しいプロフェッショナルなOracle Java Programmer(OCAJP)認定準備プログラムを開始します。無料のデモレッスン JavaDataTypes :Identifiers and Primitives」のレコーディングをご覧になることをお勧めします。開発グループの責任者であり、MIPTの教師であり、foxmindedであるVladislavRodinによる一連の記事を引き続き公開しています。





前書き



OCA(Oracle Certified Associate Java SE8 Programmer)認定は、Javaプログラミング言語の深い理解をテストする一連の風変わりな割り当てを提供します。ブロック全体が式、ループ、演算子に専念しています。今日は後者についてお話します。



オペレーターの優先順位



演算子は入力として引数を受け入れ、いくつかの値を返します。unary、binary、およびternary演算子があります。たとえば、!Falseは単項、a + bはバイナリ、 -3つの引数を取る唯一の演算子です。



最初に覚えておくべきことは、演算子の優先順位です。



  1. ポストユニアリー演算子:例外++および例外-
  2. pre-unary演算子:++例外および--exception
  3. 残りのunary演算子:+、-、!
  4. 乗算、除算、残りを取る:*、/、%
  5. 加算と減算:+、-
  6. ビットシフト演算子:<<、>>、>>>
  7. 比較演算子:<、>、<=、> =、instanceof
  8. 平等-不平等演算子:==、!=
  9. 論理演算子:&、|、^
  10. 論理演算子の短絡:&&、||
  11. 三元演算子:ブール式?式1:式

    2
  12. 割り当て演算子:=、+ =、-=、* =、/ =、%=、&=、^ =、!=、<< =、>> =、>>> =


unaryオペレーターとの連携



前回はバイナリ演算子についてお話しました。今日は、記事のタイトルに続く単項演算子について説明します。試験では、実行の順序を覚えておく必要がある計算のために、非常に複雑な式が提供される場合があります。



符号変更および論理反転演算子



論理逆演算子タイプbooleanの変数にのみ適用され、値をtrueからfalseに、またはその逆に変換します。例えば:



boolean x = false;
System.out.println(x); // false
x = !x;
System.out.println(x); // true


符号変更演算子-数字にのみ適用され、符号を逆にします。



double x = 1.21;
System.out.println(x); // 1.21
x = -x;
System.out.println(x); // -1.21
x = -x;
System.out.println(x); // 1.21


Javaは、同じCとは対照的に、整数データタイプとブール値を明確に分離しているため、符号変更演算子をブール値に使用したり、論理反転演算子を使用したりすると、コンパイルエラーが発生します。



int x = !5; // DOES NOT COMPILE
boolean y = -true; // DOES NOT COMPILE
boolean z = !0; // DOES NOT COMPILE


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



インクリメント++およびデクリメント演算子整数変数に適用され、コードi ++(i--)および++ i(-i)で、それぞれポストインクリメント(デクリメント)およびプレインクリメント(デクリメント)の2つのバリエーションがありますバリエーションの違いは、++ iは変数をインクリメントして新しい値を返すのに対し、i ++は古い値を返してから変数をインクリメントすることです。この違いは、次のコードでより明確に確認できます。



int counter = 0;
System.out.println(counter); // Outputs 0
System.out.println(++counter); // Outputs 1
System.out.println(counter); // Outputs 1
System.out.println(counter--); // Outputs 1
System.out.println(counter); // Outputs 0


試験では、そのようなオペレーターがワゴンと小さなカートである、さまざまなトリッキーなタスクが提供される場合があります。たとえば、そのようなタスクが提供される場合があります。



このプログラムの結果として何が表示されますか?

int x = 3;
int y = ++x * 5 / x-- + --x;
System.out.println("x is " + x);
System.out.println("y is " + y);


問題は、xが同じ行で複数回変更されることです。



このような問題を解決するために、式を左から右に解析し、演算子が返すものを式に代入し、変更される変数の値を個別に修正することができます。たとえば、次のようになります。



int y = 4 * 5 / x-- + --x; // x assigned value of 4
int y = 4 * 5 / 4 + --x; // x assigned value of 3
int y = 4 * 5 / 4 + 2; // x assigned value of 2


ご覧のとおり、演算子を適用するための上記のすべてのルールが適用されます。結果は次のようになります。



x is 2
y is 7


続きを読む








All Articles