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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Java java final 1 2022/06/10 22:49
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- C言語・C++・C# char string[100]; int c, i=0; while( (c=getchar()) 2 2022/05/30 21:41
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
VB.NET getとsetの概念がわかり...
-
他のファイルの変数参照
-
生成したインスタンスを削除す...
-
非staticフィールドを参照でき...
-
VB.netで標準モジュールからフ...
-
変数の参照でエラーが出てしま...
-
ファイル読み込み/書き込み速度...
-
VB.NET Newしたものを変数に代...
-
フィールドでのnewとコンストラ...
-
フォームの存在をチェックする方法
-
整数の引数に列挙を使ったとき
-
インスタンスを同じ名前で作成...
-
文字列を日付に変換でParseExce...
-
SerialPort処理でInvokeメソッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
他のファイルの変数参照
おすすめ情報