
No.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)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。
No.3
- 回答日時:
こんにちは。
わたしもjavaをはじめたてのころは意味がわかりませんでした。
zozyさんがわかりやすく説明してくださっているので、単なる追記になりますが、基本的にStringはクラスです。intはクラスではありません。ここが大きな違いです。
これからコーディングしていくうえで大変お世話になるコレクションクラスなどわかりやすいですが、必ずArrayList list = new ArrayList();のように宣言して、インスタンスをつくりますよね。あなたも質問内容からするとそこまでは理解されているようです。だから本来はStringもクラスなのでbのように宣言しなければいけない。しかし、String はあまりにも使用頻度が高いため、プリミティブ型と同じように宣言するこtが許されました。この後の説明はzozyさんがされています。
なので、クラスを呼び出すときはインスタンスを必ず作らなければならない。ただし、Stringだけは以上の理由から例外として認められている、と認識していただければいいのではないでしょうか。
No.1
- 回答日時:
String a="a";とString a=new String("a");
は基本的には同じ処理をしています。
ただ、String型の変数への代入は頻繁に使うので
String a=new String("a");
を省略して
String a="a";
でも大丈夫なようにjavaコンパイラが勝手に補完してくれています。
このようなことを一般的にはシンタックスシュガーと言うようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
C#において、同じインスタンス...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
変数名の付け方
-
次の日本語の意味を教えて下さい
-
複数の変数を宣言する時、同時...
-
抽象クラスのインスタンス生成...
-
Systemクラスはインスタンスが...
-
C# インスタンスの破棄
-
SerialPort処理でInvokeメソッ...
-
newしないインスタンス?実体化...
-
文字列を日付に変換でParseExce...
-
javaについて
-
vb.netでFAXを送信する方法
-
VB.NET Form1からForm2を開い...
-
中学のクラス数
-
「タイプ初期化子が例外をスロ...
-
ヒグマを撃退
-
VBScriptからストアドプロシー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
private static という変数の修飾
-
C#において、同じインスタンス...
-
複数の変数を宣言する時、同時...
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
生成したインスタンスを削除す...
-
文字列を日付に変換でParseExce...
-
次の日本語の意味を教えて下さい
-
C#「オブジェクト参照が必要で...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
[Visual C#] 優先される処理に...
-
newしないインスタンス?実体化...
-
C#の構造体の開放のしかた
-
javaのクラスの作り方、エラー...
おすすめ情報