String str1 = new String("aaa");和
String str1 = "aaa"有什么不一样吗?为什么我用String str1 = "aaa";
String str2 = "aaa";
System.out.println(str1 == str2);得到的结果是true;
而用
String str1 = new String("aaa");
String str2 = new String("aaa");
System.out.println(str1 == str2);得到的结果却是false?
String str1 = "aaa"有什么不一样吗?为什么我用String str1 = "aaa";
String str2 = "aaa";
System.out.println(str1 == str2);得到的结果是true;
而用
String str1 = new String("aaa");
String str2 = new String("aaa");
System.out.println(str1 == str2);得到的结果却是false?
str1是引用句柄,他存放在“栈内存”中
new String()是创建对象开辟的对象空间,他存放在“堆内存”中。String str1 = "aaa";
String str2 = "aaa";
上面这种方式str1 与str2 指向同一个对象"aaa"。String str1 = new String("aaa");
String str2 = new String("aaa");
这种方式str1 与str2 指向两个具有相同内容的不同对象。两种情况是完全不同的。
String str2 = "aaa";
System.out.println(str1 == str2);得到的结果是true;
而用
String str1 = new String("aaa");
String str2 = new String("aaa");
System.out.println(str1 == str2);得到的结果却是false?
前者是两个String的句柄指向同一个内存中的数据,也就是两个指针指向同一个heap
而java的==判断的就是同一地址的内容而后者相当于在内存中开辟了两个块,用==就是false,因为两个String的地址完全不同equals()比较的仅仅是内容