Java入門から進級への道(三)
20905 ワード
以前の記事では、Javaの変数と基本データ型について説明しましたが、この章ではJavaの演算子と式について説明します.
コンピュータの最も基本的な用途の1つは数学の演算を実行することで、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に等しい(区別は以下を参照)
自己加算(++)自己減算(-)演算子は特殊な演算子であり、演算には演算に2つのオペランドが必要であり、自己加算自己減算演算子はオペランドである.
ここではa++と++aの違いを通俗的な物語で説明します.
もしあなたが今日今月10元の給料を出したとしたら、夜帰って興味津々に奥さんに渡すつもりで、帰り道にまた1元拾ったとしたら、11元があります.もしあなたがこの1元を仕事に渡すつもりがなければ、あなたは手を背負って1元を手に隠して、この時奥さんに渡したのは10元で、もしあなたが大公無私であれば、1元も両手で捧げたが、妻様に渡したのは11元だった.
関係演算子
次の表はJavaがサポートする関係演算子です.
表の例の整数変数Aの値は10で、変数Bの値は20です.
演算子
説明
例
==
2つのオペランドの値が等しいかどうかを確認し、等しい場合は条件が真であることを確認します.
(A==B)は偽物です.
!=
2つのオペランドの値が等しいかどうかを確認し、値が等しくない場合は条件が真であることを確認します.
(A!=B)は本当です.
>
左のオペランドの値が右のオペランドの値より大きいかどうかをチェックし、条件が真であればチェックします.
(A>B)は偽です.
左のオペランドの値が右のオペランドの値より小さいかどうかをチェックし、条件が真であればチェックします.
(A
>=
左のオペランドの値が右のオペランドの値より大きいか、等しいかをチェックします.もしそうであれば、条件は真です.
(A>=B)は偽です.
<=
左のオペランドの値が右のオペランドの値より小さいか、等しいかをチェックします.もしそうであれば、条件は真です.
(A<=B)は真です.
ビット演算子
Javaは、整数タイプ(int)、ロング整数タイプ(long)、ショート整数タイプ(short)、文字タイプ(char)、バイトタイプ(byte)などのタイプに適用されるビット演算子を定義します.
ビット演算子はすべてのビットに作用し、ビットで演算されます.a=60、b=13と仮定します.これらのバイナリフォーマットは次のようになります.
次の表に、整数変数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,001を得た.
<
ビットごとに演算子を左に移動します.左のオペランドは、ビットごとに右に移動するオペランドで指定された桁数です.
A<<2は240、すなわち1111 0000を得る
>>
ビットごとに右に移動演算子.左オペランドビットごとに右に移動操作数で指定した桁数.
A>>2得た15即ち1111
>>>
ゼロオペレータをビットで右に移動します.左のオペランドの値は右のオペランドで指定したビット数で右に移動し、移動した空席はゼロで埋められます.
A>>>2は15すなわち0000 1111を得る
論理演算子
次の表に、論理演算子の基本演算を示します.ブール変数Aが真であり、変数Bが偽であるとします.
オペレータ
説明
例
&&
論理演算子と呼ばれます.両方のオペランドが真である場合にのみ、条件が真です.
(A&&B)は偽物です.
| |
論理またはオペレータと呼ばれます.2つのオペランドのいずれかが真である場合、条件は真です.
(A||B)は本当です.
!
論理非演算子と呼ばれます.オペランドの論理状態を反転します.条件がtrueの場合、論理非演算子はfalseを取得します.
!(A&&B)は本当です.
代入演算子
Java言語でサポートされている代入演算子を次に示します.
オペレータ
説明
例
=
右オペランドの値を左オペランドに割り当てる単純な代入演算子
C=A+B A+B A+Bで得られた値をCに与える
+ =
左オペランドに左オペランドと右オペランドを加算して割り当てる加算値オペレータ
C+=AはC=C+Aに等しい
- =
左オペランドに左オペランドと右オペランドを減算する減算オペレータ
C-=AはC=C-に等しい A
* =
左オペランドに左オペランドと右オペランドを乗算する乗算演算子
C*=AはC=C*Aに等しい
/=
左オペランドに左オペランドと右オペランドを除算する除算オペレータ
C/=AはC=C/Aに等しい
(%)=
左オペランドと右オペランドをモールドした後、左オペランドに値を割り当てます.
C%=AはC=C%Aに等しい
<< =
左シフト割付演算子
C<<=2はC=C<<2に等しい
>> =
右シフト割付演算子
C>=2はC=C>>2に等しい
&=
ビット単位および代入演算子
C&=2はC=C&2に等しい
^ =
[ビット別](By Position)オペレータまたは[割り当て](Assign)オペレータ
C^=2はC=C^2に等しい
| =
ビット単位または代入オペレータ
C|=2はC=C|2に等しい
条件演算子(?:)
条件演算子は三元演算子とも呼ばれます.演算子には3つのオペランドがあり、ブール式の値を判断する必要があります.演算子の主な決定は、変数にどの値を割り当てるべきかです.
nstanceof演算子
この演算子は、オブジェクトインスタンスを操作し、オブジェクトが特定のタイプ(クラスタイプまたはインタフェースタイプ)であるかどうかを確認するために使用されます.
instanceof演算子のフォーマットは次のとおりです.
Java演算子の優先度
複数の演算子が1つの式に表示される場合、誰が先に後になるかは、演算子の優先度の問題です.1つの複数の演算子の式では、演算子の優先度が異なると、最終的に得られる結果の差が大きくなります.
たとえば、(1+3)+(3+2)*2で、この式はプラス記号で最優先に計算すると、答えは18で、乗算記号で最優先すると、答えは14です.
さらに、x=7+3*2、ここでxは20ではなく13、乗算演算子は加算演算子より優先度が高いので、3*2を計算して6、それから7を加算します.
次の表の中で最も優先度の高い演算子は表の一番上にあり、最も優先度の低い演算子は表の一番下にあります.
カテゴリ
オペレータ
関連性
接尾辞
()[].(ポイントオペレータ)
左から右
1元
+ + - !〜
右から左へ
じょうせい
*/%
左から右
ふかせい
+ -
左から右
シフト
>>>>> <
左から右
関係
>> = << =
左から右
等しい
== !=
左から右
ビットと
&
左から右
ビット別異動
^
左から右
ビット単位または
|
左から右
ロジックと
&&
左から右
論理または
| |
左から右
条件
?:
右から左へ
に値を付ける
= + = - = * =/=%= >> = << =&= ^ = | =
右から左へ
カンマ
,
左から右
コンピュータの最も基本的な用途の1つは数学の演算を実行することで、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に等しい(区別は以下を参照)
1 public class HelloWorld {
2 public static void main(String[] args) {
3 int a = 2;
4 int b = 3;
5 int c = 4;
6 double d = 5.6;
7 System.out.println(a + b); // 5
8 System.out.println(a - b); // -1
9 System.out.println(a * b); // 6
10 System.out.println(a / b); // 0
11 System.out.println(b % a); // 1
12 System.out.println(c % a); // 0
13 System.out.println(d % a); // 1.5999999999999996 , +
14 System.out.println(a++); // 2
15 System.out.println(a); // 3
16 System.out.println(++a); // 4
17 System.out.println(a); // 4
18 System.out.println(b--); // 3
19 System.out.println(b); // 2
20 System.out.println(--b); // 1
21 System.out.println(b); // 1
22 }
23 }
自己加算(++)自己減算(-)演算子は特殊な演算子であり、演算には演算に2つのオペランドが必要であり、自己加算自己減算演算子はオペランドである.
ここではa++と++aの違いを通俗的な物語で説明します.
もしあなたが今日今月10元の給料を出したとしたら、夜帰って興味津々に奥さんに渡すつもりで、帰り道にまた1元拾ったとしたら、11元があります.もしあなたがこの1元を仕事に渡すつもりがなければ、あなたは手を背負って1元を手に隠して、この時奥さんに渡したのは10元で、もしあなたが大公無私であれば、1元も両手で捧げたが、妻様に渡したのは11元だった.
関係演算子
次の表はJavaがサポートする関係演算子です.
表の例の整数変数Aの値は10で、変数Bの値は20です.
演算子
説明
例
==
2つのオペランドの値が等しいかどうかを確認し、等しい場合は条件が真であることを確認します.
(A==B)は偽物です.
!=
2つのオペランドの値が等しいかどうかを確認し、値が等しくない場合は条件が真であることを確認します.
(A!=B)は本当です.
>
左のオペランドの値が右のオペランドの値より大きいかどうかをチェックし、条件が真であればチェックします.
(A>B)は偽です.
左のオペランドの値が右のオペランドの値より小さいかどうかをチェックし、条件が真であればチェックします.
(A
>=
左のオペランドの値が右のオペランドの値より大きいか、等しいかをチェックします.もしそうであれば、条件は真です.
(A>=B)は偽です.
<=
左のオペランドの値が右のオペランドの値より小さいか、等しいかをチェックします.もしそうであれば、条件は真です.
(A<=B)は真です.
1 public class HelloWorld {
2 public static void main(String[] args) {
3 int a = 2;
4 int b = 3;
5 System.out.println(a > b); // false
6 System.out.println(a >= b); // false
7 System.out.println(a < b); // true
8 System.out.println(a <= b); // true
9 System.out.println(a == b); // false
10 System.out.println(a != b); // true
11 }
12 }
ビット演算子
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,001を得た.
<
ビットごとに演算子を左に移動します.左のオペランドは、ビットごとに右に移動するオペランドで指定された桁数です.
A<<2は240、すなわち1111 0000を得る
>>
ビットごとに右に移動演算子.左オペランドビットごとに右に移動操作数で指定した桁数.
A>>2得た15即ち1111
>>>
ゼロオペレータをビットで右に移動します.左のオペランドの値は右のオペランドで指定したビット数で右に移動し、移動した空席はゼロで埋められます.
A>>>2は15すなわち0000 1111を得る
論理演算子
次の表に、論理演算子の基本演算を示します.ブール変数Aが真であり、変数Bが偽であるとします.
オペレータ
説明
例
&&
論理演算子と呼ばれます.両方のオペランドが真である場合にのみ、条件が真です.
(A&&B)は偽物です.
| |
論理またはオペレータと呼ばれます.2つのオペランドのいずれかが真である場合、条件は真です.
(A||B)は本当です.
!
論理非演算子と呼ばれます.オペランドの論理状態を反転します.条件がtrueの場合、論理非演算子はfalseを取得します.
!(A&&B)は本当です.
1 public class HelloWorld {
2 public static void main(String[] args) {
3 boolean a = true;
4 boolean b = false;
5 System.out.println(a && b); // false
6 System.out.println(a || b); // true
7 System.out.println(!(a && b)); // true
8 }
9 }
代入演算子
Java言語でサポートされている代入演算子を次に示します.
オペレータ
説明
例
=
右オペランドの値を左オペランドに割り当てる単純な代入演算子
C=A+B A+B A+Bで得られた値をCに与える
+ =
左オペランドに左オペランドと右オペランドを加算して割り当てる加算値オペレータ
C+=AはC=C+Aに等しい
- =
左オペランドに左オペランドと右オペランドを減算する減算オペレータ
C-=AはC=C-に等しい A
* =
左オペランドに左オペランドと右オペランドを乗算する乗算演算子
C*=AはC=C*Aに等しい
/=
左オペランドに左オペランドと右オペランドを除算する除算オペレータ
C/=AはC=C/Aに等しい
(%)=
左オペランドと右オペランドをモールドした後、左オペランドに値を割り当てます.
C%=AはC=C%Aに等しい
<< =
左シフト割付演算子
C<<=2はC=C<<2に等しい
>> =
右シフト割付演算子
C>=2はC=C>>2に等しい
&=
ビット単位および代入演算子
C&=2はC=C&2に等しい
^ =
[ビット別](By Position)オペレータまたは[割り当て](Assign)オペレータ
C^=2はC=C^2に等しい
| =
ビット単位または代入オペレータ
C|=2はC=C|2に等しい
1 public class HelloWorld {
2 public static void main(String[] args) {
3 int a = 10;
4 int b = 20;
5 int c = 0;
6 c = a + b;
7 System.out.println(c); // 30
8 c += a;
9 System.out.println(c); // 40
10 c -= a;
11 System.out.println(c); // 30
12 c *= a;
13 System.out.println(c); // 300
14 a = 10;
15 c = 15;
16 c /= a;
17 System.out.println(c); // 1
18 a = 10;
19 c = 15;
20 c %= a;
21 System.out.println(c); // 5
22 c <<= 2;
23 System.out.println(c); // 20
24 c >>= 2;
25 System.out.println(c); // 5
26 c >>= 2;
27 System.out.println(c); // 1
28 c &= a;
29 System.out.println(c); // 0
30 c ^= a;
31 System.out.println(c); // 10
32 c |= a;
33 System.out.println(c); // 10
34 }
35 }
条件演算子(?:)
条件演算子は三元演算子とも呼ばれます.演算子には3つのオペランドがあり、ブール式の値を判断する必要があります.演算子の主な決定は、変数にどの値を割り当てるべきかです.
variable x = (expression) ? value if true : value if false
1 public class HelloWorld {
2 public static void main(String[] args) {
3 int a, b;
4 a = 10;
5 // a 1 , b 20, 30
6 b = (a == 1) ? 20 : 30;
7 System.out.println(b); // 30
8
9 // a 10 , b 20, 30
10 b = (a == 10) ? 20 : 30;
11 System.out.println(b); // 20
12 }
13 }
nstanceof演算子
この演算子は、オブジェクトインスタンスを操作し、オブジェクトが特定のタイプ(クラスタイプまたはインタフェースタイプ)であるかどうかを確認するために使用されます.
instanceof演算子のフォーマットは次のとおりです.
( Object reference variable ) instanceof (class/interface type)
1 public class HelloWorld {
2 public static void main(String[] args) {
3 String title = "hello world";
4 System.out.println(title instanceof String); // true title String ,
5 }
6 }
Java演算子の優先度
複数の演算子が1つの式に表示される場合、誰が先に後になるかは、演算子の優先度の問題です.1つの複数の演算子の式では、演算子の優先度が異なると、最終的に得られる結果の差が大きくなります.
たとえば、(1+3)+(3+2)*2で、この式はプラス記号で最優先に計算すると、答えは18で、乗算記号で最優先すると、答えは14です.
さらに、x=7+3*2、ここでxは20ではなく13、乗算演算子は加算演算子より優先度が高いので、3*2を計算して6、それから7を加算します.
次の表の中で最も優先度の高い演算子は表の一番上にあり、最も優先度の低い演算子は表の一番下にあります.
カテゴリ
オペレータ
関連性
接尾辞
()[].(ポイントオペレータ)
左から右
1元
+ + - !〜
右から左へ
じょうせい
*/%
左から右
ふかせい
+ -
左から右
シフト
>>>>> <
左から右
関係
>> = << =
左から右
等しい
== !=
左から右
ビットと
&
左から右
ビット別異動
^
左から右
ビット単位または
|
左から右
ロジックと
&&
左から右
論理または
| |
左から右
条件
?:
右から左へ
に値を付ける
= + = - = * =/=%= >> = << =&= ^ = | =
右から左へ
カンマ
,
左から右