javaのメモリ領域
レジストリ
cpuに存在する領域で、制御できない
stack領域
基本型、参照型が保存される
heap領域
newで生成されたオブジェクト
static領域
staticメンバー
constant pool
コンパイル時に確定され、.classに存在するデータ+ほか
constant poolに生成される
command String a1 = "aaa"; String a2 = "aaa"; System.out.println(a1 == a2); // true
1, constant pool領域に"aaa"が生成され、stack領域に"aaa"を指す参照値a1が生成される。
2, constant pool領域に"aaa"が生成され、stack領域に"aaa"を指す参照値a2が生成される。
3, a1, a2とも"aaa"のアドレスが入っているので、trueになる。
heap領域に生成される
command String a3 = new String("aaa"); String a4 = new String("aaa"); System.out.println(a3 == a4); // false
1, heap領域に"aaa"が生成され、stack領域に"aaa"を指す参照値a3が生成される。
2, heap領域に"aaa"が生成され、stack領域に"aaa"を指す参照値a4が生成される。
3, a3,a4は別々の"aaa"アドレスが入っているので、falseになる。
constant pool, heap領域に生成される
command String a5 = "aaa"; String a6 = new String("aaa"); System.out.println(a5 == a6); // false
1, constant pool領域に"aaa"が生成され、stack領域に"aaa"を指す参照値a5が生成される。
2, heap領域に"aaa"が生成され、stack領域に"aaa"を指す参照値a6が生成される。
3, a5,a6は別々の"aaa"アドレスが入っているので、falseになる。