比较地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| String a = "123"; String b = "123";
System.out.println(a == b);
String c = new String("123");
System.out.println(a == c);
String d = a;
System.out.println(d == b);
String e = "1" + "23";
System.out.println(a == e);
String _1 = "1"; String _23 = "23"; String f = _1 + _23;
System.out.println(a == f);
String g = "1" + _23;
System.out.println(g == a);
final String f1 = "1"; final String f2 = "23";
System.out.println(a==f1+f2);
|
新建几个对象
String test = “a”
新建一个对象,jvm在编译时会判断常量池是否有”a”,如果有直接指向它,如果没有就创建
String test = new String(“a”)
两个,一个堆一个常量池
String str = “a”+”b”
三个,”a”,”b”,”ab”都在常量池里
**String str = “a”+new String(“b”) **
四个,常量池里是,”a”,”b”,堆里有”b”,”ab”
只要+上了new的对象,产生的新对象都在堆里面,不放在常量池里