大家看看一下代码:
public class Main {
public static void main(String[] args) {
String str1 = new String("123456");
String str2 = new String("123456");
System.out.println(str1 == str2);
}
}
输出结果为false(我知道是因为"=="符号比较的是str1与str2的空间存储位置,因为分配了两个空间存储·,所以输出false)
大家再看看这个代码
public class Main {
public static void main(String[] args) {
String str1 = "123456";
String str2 = "123456";
System.out.println(str1 == str2);
}
}
输出结果为true,按我的理解就是这里没有new String()对象,而"123456"这个对象是系统分配分配空间的,只是把"123456"对象初始化str1和str2,也就是str1和str2引用了"123456";
大家对下面的代码有什么理解,欢迎帮我指导指导,感谢!
其实博主你的理解已经差不多接近正确了。
是用new来创建的话,每new一次都会在内存中开辟一个新的内存区域,所以第一个图str1和str2在内存中的地址是不同的,所以输出为false。
第二个图直接将字符串赋值给变量的话,就需要了解字符串缓存机制程序。字符串赋值给变量时,先从缓存池中查找是否有相同的字符串对象,如果有的话就不会重新生成而是用缓存池中的字符串对象;如果在字符串缓存池中没找到相同的字符串对象时才会在内存中开辟一块内存区新建字符串对象。对于str1,当str1建立以后会将“123456”字符串放入缓存池中,所以运行 String str2 = "123456"的时候就会直接从缓存池中取出相同的对象,也就说,str1和str2的地址都是一样的,所以是true。
哈哈以上是我的一些理解,如果有什么地方有疏漏,欢迎指正交流。
new String()是创建一个字符串
String str1是直接赋值
你创建了两个String存储的地址就不一样,所以输出false
第二个只是判断String的字符串是否相等