コンパイル時の文字列連結
出力はどれか。
public class Main {
public static void main(String[] args) {
String a = "Java";
String e = "Ja";
final String f = "Ja";
System.out.println((a == e + "va") + " " + (a == f + "va"));
}
}
- A
false true - B
true true - C
false false - D
true false
正解と解説を見る
正解: A
- A: 変数 e を含む連結は実行時に新しい String を作り (false)、final の f は定数なのでコンパイル時に "Java" になります (true)。
- B: e は final ではないので、
e + "va"は実行時に新しい String になり、プールの "Java" とは別物です。 - C: final の変数は定数として扱われるので、
f + "va"はプールの "Java" と同じです。 - D: final が付いている方が定数として扱われます。逆に考えています。
ポイント
- 変数 e を含む連結は実行時に新しい String が作られるので、プールの "Java" とは別物です。
- final の変数 f は定数として扱われ、
f + "va"はコンパイル時に "Java" になるので true です。
「文字列の作成と操作 (テキスト・ブロックを含む)」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)