以前のコンテンツでは、変数を定義および初期化する方法を学びました。変数を定義する目的は、データを操作することです。 Java言語は、「オペレーター」と呼ばれるこれらのデータの操作に特別に使用されるコード記号を提供します。
オペレーターの使用によると、次のカテゴリに分割できます。
算術演算子
割り当てオペレーター
自己増加と自己排除オペレーター
論理演算子
リレーショナル演算子
ビットオペレーター
心配しないでください、それらは操作データの処理に役立つ単なるシンボルです。以下はコードの例を使用して、これらの演算子の使用を1つずつ説明します。
1。算術演算子
算術演算子は、数値変数の残りを追加、減算、乗算、分割、および取得するための算術演算です。
追加: +
減らす:-
取る:*
取り除く:/
バランスを取る:%
public class operatorsdemo {public static void main(string [] args){int num1 = 100; int num2 = 20; // 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))を取得します。 }}出力結果:
num1 + num2:120num1 -num2:80num1 * num2:2000num1 / num2:5num1%num2:0
2。割り当て演算子
ほとんどのプログラミング言語と同様に、Javaは '='演算子を使用して割り当て操作を実行します。この操作は、右側の計算結果を左側の変数に割り当てます。 Javaの割り当てオペレーターには以下が含まれます。
=(num2 = num1)
+=(num2 += num1等価num2 = num2 +num1)
- =(num2- = num1等価num2 = num2 -num1)
*=(num2 *= num1等価num2 = num2 *num1)
/=(num2 /= num1等価num2 = num2 /num1)
%=(num2%= num1等価num2 = num2%num1)
public class operatorsdemo {public static void main(string [] args){int num1 = 10; int num2 = 20; num2 = num1; System.out.println( "= output:"+num2); num2 += num1; System.out.println( "+= output:"+num2); num2- = num1; System.out.println( " - = output:"+num2); num2 *= num1; System.out.println( "*= output:"+num2); num2 /= num1; System.out.println( "/= output:"+num2); num2%= num1; System.out.println( "%= output:"+num2); }}結果出力:
=出力:10+=出力:20- =出力:10*=出力:100/=出力:10%=出力:0
3。自己排気および自己排除演算子
自己侵入および自己決定演算子は、1つの変数でのみ動作し、変数の値は変化します。
num ++(同等の数字= num+ 1)は、主に数値変数に対してそれ自体で増加し、独自の変数の値に1を追加します。
num - (同等のnum = num -1)自己控除、主に数値変数をターゲットにし、ボディ変数の値を1で減算します。
public class operatorsdemo {public static void main(string [] args){int num1 = 100; int num2 = 200; num1 ++; num2--; System.out.println( "num1 ++ is:"+num1); system.out.println( "num2-- is:"+num2); }}結果出力:
num1 ++ is:101num2-- IS:199
4。論理演算子
名前が示すように、論理演算子は論理的判断に使用されます。操作の結果は、タイプブールの値、つまり真または偽です。論理的なユニフォーム演算子があります
| 論理演算子 | 論理的な関係 |
|---|---|
| && | そして |
| ` | |
| ! | いいえ |
B1 && B2:B1とB2の両方がTRUEの場合、B1 && B2はtrueを返します。
B1 || B2:B1とB2の両方がfalseの場合、Falseが返され、それ以外の場合はtrueが返されます。
! B1:B1の反対の値を返します。B1が偽の場合、trueを返します。 B1が真の場合、falseを返します
public class operatorsdemo {public static void main(string [] args){boolean b1 = true;ブールb2 = false; System.out.println( "b1 && b2:" +(b1 && b2)); System.out.println( "b1 || b2:" +(b1 || b2)); System.out.println( "!(b1 && b2):" +!(b1 && b2)); }}出力結果:
b1 && b2:falseb1 || B2:true!(b1 && b2):true
論理的な短絡:
Javaでは、論理演算子が短絡操作をサポートし、式全体の値を明確に表現できたら、式の残りの部分を計算する必要はありません。たとえば、オブジェクトが空ではなく、その方法の返品値が空でないことを判断する必要があるため、次のような判断を下すことができます。
if(object!= null && object.somefunction()!= null){//何かをする。}オブジェクトが空の場合、最初の部分式式オブジェクト!= nullはfalseを返し、式object.somefunction()!= nullの結果に関係なく、&&オペレーターの後に最終値はfalseです。コンパイラは操作のこの部分を自動的に最適化し、object.somefunction()!= nullを実行しません。
5。リレーショナル演算子
2つの変数データのサイズを比較するために使用され、ブールの値、つまり真またはfalseを返します
リレーショナルオペレーターは次のとおりです。
| リレーショナル演算子 | 関係 |
|---|---|
| > | より大きい |
| < | 未満 |
| == | 等しい |
| != | 等しくない |
| > = | 以上大きい |
| <= | 以下以上 |
'=='および '!='は、すべてのタイプの値とオブジェクト(つまり、プリミティブ型変数と参照型変数)に適しています。
'>'、 '<'、 '> ='および '<='は、ブール型の値には適用されません。なぜなら、それらは真または偽のみであり、実用的な意味を持たないよりも大きいためです。
public class operatorsdemo {public static void main(string [] args){int num1 = 10; int num2 = 50; if(num1 == num2){system.out.println( "num1およびnum2は等しい"); } else {system.out.println( "num1とnum2は等しくない"); } if(num1!= num2){system.out.println( "num1およびnum2は等しくない"); } else {system.out.println( "num1とnum2は等しくない"); } else {system.out.println( "num1とnum2は等しくない"); } equal ");} if(num1> num2){system.out.println(" num1はnum2 ");} else {system.out.println(" num1はnum2 ") num2 ");} if(num1 <num2){system.out.println(" num1はnum2 ");} if(num1 <num2){system.out.println(" num1はnum2 ") system.out.println( "num1はnum2以下です");出力結果:
num1とnum2は等しくなく、num2は等しいnum1がnum2num1がnum2num1がnum2num1よりも小さいよりも大きくないnum2はnum2num1がnum2以下ではありません
6。ビット演算子
ビット演算子が標的とする操作オブジェクトは、バイナリ「ビット」であり、整数型(int)、長い、短い、文字型(char)、およびバイトタイプ(バイト)およびその他のタイプに適用できます。操作中、対応するビット(0または1)は、ブール代数操作または移動操作で実行されます。
| ビットオペレーター | 計算ロジック |
|---|---|
| & | 操作:両方のオペランドが1である限り、ビットの結果は1、そうでなければ0です。 |
| ` | ` |
| ^ | XOR操作:一定の場合、2つのオペランドが同じでない場合、ビットの結果は1、そうでなければ0です。 |
| 〜 | 非操作:ビットワイズ補体演算子はオペランドの各ビットをフリップします |
| << | バイナリ左シフト演算子:左のオペランドは、右オペランドによってビット左シフトされています。 |
| >> | バイナリ右シフト演算子:左オペランドは、右オペランドによってビット右シフトされています。 |
| >>> | バイナリ右シフトゼロ補完演算子:左オペランドの値は、右オペランドで指定されたビットの数に応じて右にシフトされ、結果の空のビットはゼロで満たされます |
計算ロジックの説明はやや不明瞭であり、例を使用して、ビットオペレーターが計算をどのように実行するかをより明確に理解できます。 xが60に等しい場合と仮定します。 yは13に等しい。それらのバイナリ表現、およびビット操作の結果は次のとおりです。
x = 0011 1100y = 0000 1101------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>と>>>の違いに注意してください。
右シフト演算子>>、操作の値が正の場合、0が高い位置に挿入されます。値が負の場合、1が高い位置に挿入されます。
ゼロ演算子を埋めるために右に移動>>>、ポジティブまたはネガティブに関係なく、0をハイ位置に挿入します。
>ビット操作がわからない場合は、最初にスキップしてください。実際に使用されたら、もう一度勉強できます。
7。オペレーターの優先順位
オペレーターの優先順位は、式の用語のグループ化を決定します。式の評価方法に影響します。特定のオペレーターは、他のオペレーターよりも優先度が高くなります。
たとえば、乗算演算子は追加演算子よりも優先度が高く、式1 + 5 * 6。オペレーターの優先順位によれば、コンパイラは最初に5 * 6を計算し、次に30 + 1を計算し、最後に結果を取得します。
さまざまなオペレーターの優先事項は、大部分から小さいものです。
。、()、[]単眼 +(右左左結合)、モノクーラー - (右から左の結合)、++、 - 、〜、
このような複雑な優先リストについて心配しないでください。ほとんどの場合、表現自体は優先順位を簡単に見ることができます。たとえば、割り当て操作の優先度が最も低い必要があります。優先度が明確でない場合、私たちはそれを望む方法で優先度を変更することができるので、オペレーターの優先順位を覚えすぎる必要はありません。
8。他の演算子
三方演算子:
Javaの条件付きオペレーターは3成分演算子であり、その形式は次のとおりです。
ブールアネクプレッション? valuewhentrue:valuewhenfalse
ブール式の式値が真である場合、式の値は、valuewhentrueの値、そうでなければ値の値です。
たとえば、Xの絶対値を計算する場合は、次のコードを使用して実装できます。
if(x> = 0){y = x;} else {y = -x;}三元演算子を介して、y = x> = 0が1つだけ必要ですか? x:-x;それを完了するには、より簡潔です。
タイプ変換演算子:
多くの場合、タイプ変換を使用します。適切な時期に、Javaはデータ型に従ってデータ型を自動的に別のデータ型に変換します。たとえば、整数変数に整数値を割り当てると、コンパイラはintをフロートに変換して変数に割り当てます。
ただし、多くの場合、Javaはタイプ変換を実行する必要があるかどうかを判断できません。現時点では、タイプ変換演算子が必要です。これにより、次のようなタイプ変換を明示的に実行できます。
int a = 10; long b =(long)a; long c =(long)100;
両方の変数と定数を変換できます。
フローティングポイント数のタイプ変換を実行する場合、切り捨ての問題に注意を払う必要があります。 10.9:(int)10.9を変換すると入力する場合、その値は丸みを帯びていませんが、10