public class Sample {
public static void main(String[] args) {
String str = "apple";
String[] array = {"a", "p", "p", "l", "e"};
String result = "";
for(String val : array){
result = result + val;
}
boolean a = str == result;
boolean b = str.equals(result);
System.out.println(a + ":" + b);
}
}
これをコンパイル、実行した時の結果が問題として出されているのですが、実際に行うと
false : true
が出力され、それが答えになります。
これは同値性と同一性の問題で、==がfalseになる解説が
「==で同一性を判定していますが、2つの変数は同じ文字列を保持していても、参照しているStringのインスタンスは異なります。同じ参照先ではないため、==演算子はfalseを返します。」
と書かれています。
ここで疑問というか理解できないという部分が生まれました。
Stringは特別で、コンスタントプールという仕組みで、同じ文字リテラルがプログラム内で再び登場すれば文字列インスタンスへの参照が使い回されるはずです。いくら==を使用したからといって、trueが返されると思ったんですが。(そういう問題も出題であります。)
それで調べてみました。
http://qiita.com/tony_factories/items/4aa65f14be …
文字列結合後も==でtrueになるようです。
一応、
public class Sample {
public static void main(String[] args) {
String str = "apple";
String str2 = "" + "a"+"p"+"p"+"l"+"e";
boolean a = str == str2;
System.out.println(a);
}
}
を実行しましたら確かに true がコンソールに出ました。
なぜ false が出力されるのかわかりません。
どうかご回答お願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java final 1 2022/06/10 22:49
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#において、同じインスタンス...
-
複数の変数を宣言する時、同時...
-
変数の参照でエラーが出てしま...
-
オブジェクト参照がオブジェク...
-
外部ライブラリの動的参照によ...
-
C#でオブジェクトの有無を取得する
-
文字列を日付に変換でParseExce...
-
変数名の付け方
-
生成したインスタンスを削除す...
-
private static という変数の修飾
-
インスタンス生成で、○○.xxx();...
-
newしないインスタンス?実体化...
-
エクセルVBAで、条件に一致する...
-
内部クラスを別ファイルに
-
「天声人語」をインターネット...
-
VBAでの[]
-
Vba ListViewの行挿入に関して...
-
「タイプ初期化子が例外をスロ...
-
パワーポイントのVBAでテキスト...
-
Vbで通常使用するプリンターを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
他のファイルの変数参照
おすすめ情報
はい、文字列リテラルの書き間違いです。
String[] array = {"a", "p", "p", "l", "e"};
String result = "";
for(String val : array){
result = result + val;
}
このresultは連結の結果、文字列リテラル"apple"になりますが・・・