[JavaSilver対策]紫本第3章まとめ

第3章

  • 演算子と優先順位
  • データの比較
  • 基本データ型の型変換
  • 基本データ型から参照型への型変換
  • ifによる分岐
  • switchによる分岐

演算子と優先順位

+=などの記号を演算子という
演算子には優先順位がある

算術演算子と炭鉱演算子

算術演算子は基本的な計算に使う演算子、演算の対象になる値や変数をオペランドという
+(足す), -(引く), *(掛ける), /(割る), %(剰余), ++(インクリメント), --(デクリメント)

代入演算子と複合代入演算子

= (代入演算子)
複合代入演算子は、算術演算子と代入演算子をあわせたもの。
a += b -> a = a + bのように算術演算子の結果を代入する。

関係演算子

2つの値の比較に使う。結果はbooleanで返ってくる
==(等しい), !=(等しくない), >(より大きい), >=(以上), <(より小さい), <=(以下)

論理演算子

2つの条件を評価し、結果をbooleanで返す
複数の条件判定が可能になる &(AND), &&(AND), |(OR), ||(OR), ^(XOR), !(NOT)


&と&&、|と||の違いは、&, |はオペランド全体を評価するのに対し、&&, ||は1つ目のオペランドで結果が確定する場合2つ目を評価しない
(これをショートサーキットと呼ぶ)

条件演算子

条件式 ? 式1 : 式2
条件演算子は条件によって異なる式を実行する。三項演算子などとも呼ばれる
条件式には結果がbooleanとなる式を指定し、結果がtrueなら式1、falseなら式2が実行される

データの比較

==!=は参照型にも使用できる。
==は参照型に使うときは、参照先が等しいかを比較する(同一性)

Stringクラスでの文字列の比較

文字列が等しいか(同値性)を比較する場合、equals()メソッドを使用する
その他にもいくつかの特徴がある

  • newしなくてもオブジェクト生成ができる
  • newせずに生成した文字列は使い回される(コンスタントプール)、intern()メソッドでも可能

intern()メソッド : コンスタントプールに同じ文字列がある場合はそれを返す、なかった場合はコンスタントプールに追加してから参照を返す

StringBuilderクラスはequalsメソッドが使えないのでtoStringしてから比較する

基本データ型の型変換

byte -> short -> int -> long -> float -> double ->...
右矢印の方向には暗黙的に型変換してくれる(ワイドニング)
逆向きは値が変わることがあるため、明示的な型変換が必要(ナローイング)
キャスト式
(変換したいデータ型) 変数やリテラル
また、booleanを除く基本データ型はchar型に変換できる。(¥u0000から¥uffffまでのunicode文字として解釈される)

基本データ型から参照型への型変換

基本データ型を参照型として扱うクラス(ラッパークラス)が用意されている。
ラッパークラス名は基本データ型の頭文字を大文字にしたものByteなど
変換は自動で行われる(オート(アン)ボクシング)ため、キャストのような仕組みはない

文字列の変換

  • 文字列から基本データ型への変換 ラッパークラス名.parseXxx(文字列) int i = Integer.parseInt("123") // 文字列からint
  • 文字列の1文字をcharに変換 文字列.charAt(インデックス) char c = "Duke".charAt(0) // 文字列のー番目(D)をcharに

ifによる分岐

if文

if(条件式){
    条件がtrueの場合の処理;
}

{}を省略して書くこともできる。その場合はif文直後の1文だけがif文の処理になる

if-else文

if(条件式){
    trueの場合の処理;
}else{
    falseの場合の処理;
}

falseの場合の処理をelseブロックに書く。複数記述でき、{}を省略すると直後の1文のみとなる

if-else if文

if(条件式1){
    条件式1がtrueの場合の処理;
}else if(条件式2){
    条件式2がtrueの場合の処理;
}else{
    すべての条件がfalseの場合の処理;
}

if文のネスト

if(){
    if(){

    }
}else{

}

また、equalsメソッドや論理演算子を使ってtrueの場合の処理をしたりすることもできる。

switchによる分岐

if文の他にswitch文でも分岐構造を実現できる

switch(式){
    case 定数1:
        式の評価結果が定数1に一致する場合の処理1;
        break; // switch文のブロックを抜ける記述、書き忘れると以下の処理が全て実行される
    case 定数2,3:
        式の評価結果が定数2か3に一致する場合の処理2;
        break;
    default:
        一致する評価がない場合の処理;// 省略可
        }

式にはbyte, short, int, char, Stringのほかに
列挙型(enum)や↑のラッパークラスが入る

:の代わりに->を使う方法がある、一致するcaseのみが実行されるのでbreak書き忘れなどによる意図しない実行が防げる

switch(式){
    case 定数 -> 式/ブロック/例外のスロー
    default -> 式/ブロック/例外のスロー
}

switch式

switchを式として扱う

int month = 12;
Srstem.out.println(
    switch(month){
        // case 定数 : 処理 yield 戻す値;
        case 12,1,2 : yield "Winter";
        // case 定数 -> 処理 戻す値;
        case 12,1,2 -> "Winter"
        default yield "N/A"
        // default必須(返り値が必要なため)
    }
    );

「3章の8つの引っ掛けポイント」

  1. 小数点 = doubleデフォ (f サフィックス)
  2. 文字列連結 = + のみ
  3. String/StringBuilder比較 = toString()必須
  4. ショートサーキット = && と &
  5. NOT反転 = !で条件反転
  6. if-else if = 順序大事
  7. switch case = final定数のみ
  8. switch型 = long/boolean不可

2026-04-29 23:16