0
String a = "test";
String b = "whatever";
String c= "test";

System.out.println(a == c); //true

文字列は不変であり、したがってこれらの文字列は同一であるため、これは true を出力すると想定しているため、Java はメモリ内の の場所 cを指します。a

String a = "test";
String b = "whatever";
String c= new String("test");

System.out.println(a == c); //false

new演算子を呼び出すことによって、Java は新しいメモリを割り当てる必要があるため、 a.

私の質問は:

String d="a";
d="rbf";
d="ergfbrhfb";
d="erhfb3ewdbr";
d="rgfb";
//...
  • への中間割り当てのメモリ割り当てに関して何が起こっていdますか?
  • 後続の割り当てが同じ文字数の場合、この答えは変わりますか? (つまり、d="abc"; d="rfb";)
  • への変更ごとに新しいメモリが割り当てられていdますか?
  • その場合、各割り当てに割り当てられたメモリが再び解放されるのはいつですか?
4

2 に答える 2

3

最後の例では、メモリの割り当てやメモリの解放はありません。文字列定数は文字列プールのメモリに永続的に残り、変数dにはそれらの文字列への異なる参照が割り当てられます。

于 2013-05-24T07:39:45.677 に答える