プロが教える店舗&オフィスのセキュリティ対策術

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

A 回答 (4件)

お二人の回答を具体的に言うと、こういうことです。


String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。
    • good
    • 2

こんにちは。


わたしもjavaをはじめたてのころは意味がわかりませんでした。
zozyさんがわかりやすく説明してくださっているので、単なる追記になりますが、基本的にStringはクラスです。intはクラスではありません。ここが大きな違いです。
これからコーディングしていくうえで大変お世話になるコレクションクラスなどわかりやすいですが、必ずArrayList list = new ArrayList();のように宣言して、インスタンスをつくりますよね。あなたも質問内容からするとそこまでは理解されているようです。だから本来はStringもクラスなのでbのように宣言しなければいけない。しかし、String はあまりにも使用頻度が高いため、プリミティブ型と同じように宣言するこtが許されました。この後の説明はzozyさんがされています。
なので、クラスを呼び出すときはインスタンスを必ず作らなければならない。ただし、Stringだけは以上の理由から例外として認められている、と認識していただければいいのではないでしょうか。
    • good
    • 1

ここが参考になるかな。

。。

参考URL:http://www.javaroad.jp/java_character2.htm
    • good
    • 0

String a="a";とString a=new String("a");


は基本的には同じ処理をしています。
ただ、String型の変数への代入は頻繁に使うので
String a=new String("a");
を省略して
String a="a";
でも大丈夫なようにjavaコンパイラが勝手に補完してくれています。
このようなことを一般的にはシンタックスシュガーと言うようです。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!