平常使用的"aa"+"bb"生成"aabb"这个过程中,实际是创建了三个String对象:"aa", "bb", "aabb"
我哥啊,你这理解可大错了。“aa”+"ab"+"av"..................只创建立一个对象。
“aa”表示常量,编译时就已确定,存于常量池中
new String{"aa"};运行时创建对象,存入堆栈。
”aa“+"bb":表示一个常量,存于常量池,
s=new String("bb")
“aa”+s;会创建一个新对象,存于堆中。
你先看看下面的练习把,看看区别在哪。自己理解吧
String s="a";
String s1 ="a";
String s7 ="b";
String s2 = "b"+s;
String s8 = s+"b";
String s3 = new String("ab");//new 新建了一个对象,s3在内存中有两个对象,面试
String s4 = new String("ab");
String s5 = new String("a");
String s6 ="ab";
System.out.println(s2.hashCode()+"...."+s6.hashCode()+".."+s8.hashCode());
System.out.println(s==s1);//ture,
System.out.println(s==s5);//flase
System.out.println(s2==s3);//有new
System.out.println(s3==s4);//flase,有new
System.out.println(s2==s6);//
System.out.println(s8==s6);flase
//s 和s1相等的原因,s存于常量池中,s1直接引用。
new String()创建的字符串不放入常量池中,他们有自己的地址空间。
|