![見出し画像](https://assets.st-note.com/production/uploads/images/41724976/rectangle_large_type_2_44569376a86412c8426a9e676bbc0172.png?width=1200)
JavaSilverに向けて③ 変数宣言と同一などの値
・var
データ型の代わりにvarを使って変数を宣言する事ができる。(型推論)
varの型推論は、コンパイル時にコンパイラが代入演算子「=」の右辺から変数のデータ型を推論する。
データ型を特定できない場合はコンパイルエラーとなる。
varはメソッドの戻り値を受け取る事も可能。
・varとコンパイル
コンパイルする際に型が決まる。そのため、varの型もコンパイル時に決まる。
varは、ローカル変数の宣言にしか使えない。フィールドの宣言にはvarを使う事はできない。フィールドの宣言に使えば、コンパイルエラーになる。
varを引数宣言に使ってもコンパイルエラーになる。
・同一と同値
同じインスタンスである事を「同一」、同じ値である事を「同値」という。
同一の場合、2つ以上の変数が同じインスタンスを参照している事を指す。
同一の場合、==演算子で判定できる。同一であればtrueが返される。
同値の場合は、==演算子で判定する事ができず、equalsメソッドを使って判定する。
*また、equalsメソッドにnullを渡した時は、(オーバーライドしていない限り)常にfalseを返す。
*コンスタントプール
同じ文字列リテラルがプログラム内に再び登場すると、メモリ空間にある文字列インスタンスへの参照が使い回しされる。
String str1 = “A”;
String str2 = “A”;
System.out.println(str1 == str2); //true
しかし、コンスタントプールは文字列リテラルの場合しか発動しない。
new演算子を使って、明示的に新しいインスタンスを作ることを示した時は、新しいインスタンスとして認識される。
・equalsメソッド
Objectクラスのequalsメソッドの定義は以下である。
public boolean equals(Object obj) {
return (this == obj);
}
このメソッドをオーバーライドする場合は、メソッドの引数などを変えてはいけない。
変えた場合は、オーバーライドではなくオーバーロードである。
Object型の引数を渡してequalsメソッドを呼び出した時は、Objectクラスに定義されたequalsメソッドが実行される。
・internメソッドとコンスタントプール
String str1 = new String(“ABC”);
String str2 = new String(“ABC”);
System.out.println(str1 == str2); //false
System.out.println(str1.intern() == str2.intern()); //true
internメソッドでは、メモリ内にある文字列の参照を戻す。internメソッドが戻す参照は1つだけである。そのため、trueとなる。
この記事が気に入ったらサポートをしてみませんか?