お世話になります。
String string1 = new String("あいうえお"); //(1)
String string2 = new String("あいうえお"); //(2)
String string3 = "あいうえお"; //(3)
String string4 = "あいうえお"; //(4)
System.out.println(string1 = = string2); //(5)
System.out.println(string3 = = string4); //(6)
実行結果
false
true
(5)がfalseになるのは分かるのですが、(6)がtrueになるのはなぜでしょう?また、(1)や(2)のようなStringオブジェクトの生成方法と(3)や(4)のようなStringオブジェクトの生成方法の違いは何でしょう?
よろしくご教授ください。
No.1ベストアンサー
- 回答日時:
(1)(2)では新しいオブジェクトを作成して文字列リテラル"あいうえお"の内容をコピーしている。
(3)(4)では変数に文字列リテラル"あいうえお"オブジェクトへの参照を代入している。
(6)がtrueになるのはコンパイラが同一の文字列リテラルに対して複数のオブジェクトを作らないように実装されているからでしょうね。
言語仕様として必ずtrueになるという保証はないと思います。
やはりそういうことですか。言語仕様としてはかならずしもtrueにはならないのですね。コンパイラはSunのやつなので、本家はそういうコンパイルをするということなのですね。誠にありがとうございました。
No.2
- 回答日時:
> (6)がtrueになるのはなぜ?
大ざっぱに説明すると、メモリを節約するために、
コンパイラが下のように書き換えているのです。
final String a = "あいうえお";
String string1 = new String(a);
String string2 = new String(a);
String string3 = a;
String string4 = a;
> (1)(2)と(3)(4)のStringオブジェクトの生成方法の違いは?
(1)(2)の方法では、コンストラクタに渡したStringと同じ内容を持つ
新しいStringオブジェクトを作ります。
内容は同じでも別のオブジェクトなので、
== で比較したときは false になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Java java final 1 2022/06/10 22:49
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Excel(エクセル) このコードに追記事項の仕方を教えて下さい。 以下のコード内容に出てくる。セルH3が空白の場合、エラー 4 2023/08/03 00:22
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
Excelで =EMBED("Acrobat Docu...
-
COMコンポーネントって何?
-
ワイルドカード<?>と型パラメー...
-
LISTBOXの内容が更新されま...
-
C#でフォームのオブジェクト名...
-
Vbで通常使用するプリンターを...
-
ADO オブジェクトの渡し方
-
bmp画像をjpegやpng画像に圧縮...
-
Setステートメントの使い方につ...
-
Objective-Cで構造体を配列や辞...
-
Excel VBA : イコールになら...
-
オブジェクトレベルとメタレベル
-
java.util.Listのヒープサイズ...
-
ビジュアルC++でボタンの有...
-
ArrayLsitのデータ取得
-
VBSでのステートメントの末尾が...
-
【ExcelVBA】Webスクレイピング...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
ワイルドカード<?>と型パラメー...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
LISTBOXの内容が更新されま...
-
Object型からDouble型へのキャスト
-
JAVAからHTMLへ値を返す方法
-
COMコンポーネントって何?
-
ビジュアルC++でボタンの有...
-
戻り値がクラスオブジェクト
-
VBA 同じ名前のオブジェクトを...
-
ASP.net 教えてください!!(...
-
Vbで通常使用するプリンターを...
-
newは明示的にした方が良いのか?
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
-
bmp画像をjpegやpng画像に圧縮...
-
Accessの連結・非連結オブジェ...
おすすめ情報