SJC-P対策 演算子(3)
文字列連結演算子について
javaの「+」演算子は数値に対する演算と、
文字列に対する連結演算が可能です。文字列と文字列を連結するのに「+」を使えるのはもちろん、
文字列と数値の連結にも「+」を使えます。
string str = "hoge"; System.out.println(str + 10 + 15); |
この演算の結果はどうなるのでしょうか?
hoge1015 |
つまり演算子の優先順位としては、文字列連結演算子の方が上です。
文字列のオペランドと、数値のオペランドに対して「+」を使うと、
常に「+」は文字列連結演算子として実行されます。ただし括弧をつけて計算すれば、当然ながら
演算する順序を変えることも出来ます。
string str = "hoge"; System.out.println(str + (10 + 15)); |
hoge25 |
string型の変数に対して、文字列の最後尾に文字列を連結して、
記憶することもできます。
このやり方を知らないと、StringBuilderクラスを使う羽目に...
string str = "hogehoge"; str += 15 + 10; System.out.println(str); |
hogehoge25 |
「+=」は、加算代入演算子です。
演算子としての優先順位は、代入演算子と同じです。
インクリメント・デクリメント演算子
前置きインクリメント・デクリメントは、
四則演算より先に実行される。ファイナル変数はインクリメント、デクリメントできない。
実際の試験では、まずソースコードがコンパイルできるか、
出来ないか調べて。それからソースコードの解析は入ると、
一つの問題に掛かる時間を短縮できます。
int x = 10; final int y = 20; System.out.println("integer :" + ++x + x++); System.out.println("final integer :" + ++y); //コンパイルエラー |
論理演算子
論理演算子(短絡)は次の二つ。
&&(AND),||(OR)特徴としては、式の左側から評価して、式が真となれば
残りの条件式は評価しない。
int x = 10; int y = 20; if(x >= 10 || y <= 30) {} //この場合は、右側の式は評価されない |
論理演算子(非短絡)は、論理積、論理和、排他的論理和の3つが使える。
非短絡の論理演算子は、ビット演算子としても使えるが、SJC-P5.0の試験では
出題されないので割愛する。
int a = 10; int b = 20; int c = 20; if(a == b & b == c) {}; //論理積...結果は false if(a == b | b == c) {}; //論理和...結果は true if(a != b ^ b != c) {}; //排他的論理和...結果は true |
論理積は2項の式を評価して、共に式の結果が真となれば
論理積の結果は真となる。論理和は2項の式を評価して、共に式のどちらかが真となれば
論理和の結果は真となるが。排他的論理和は2項の式を評価して、共に式の結果が同じでなければ
排他的論理和の結果は真となる。論理演算子(短絡)と(非短絡)の違いは式の評価方法にある。
短絡の場合は、複数の条件式で結果が真・偽となれば残りの式は評価しないが、
非短絡の場合は、複数の条件式で結果が真・偽を確定しても、残る式を全て
評価する。論理演算子(短絡)を使う方が、余計な条件式テストを省略できるので
結果的にはJVMのパフォーマンス向上につながる?かな?
int a = 1; int b = 2; int c = 3; int d = a; int e = c; if(a == b || c == e || (a+b) != e); //c == e以降は評価しない if(a == (c-b) | (a+b+c) < (c+d+e) | a < d) // a == (c-b)以降も式を評価する |