在java中生成字符串有两种方法。
1、String s1='zifuchuan ';
String s2='zifuchuan ';
2、字符串S1=新字符串(zifu chun ) )。
strings2=新字符串(zifu chuan ) )。
1 .用第一种方法创建的两个字符串
1、String s1='zifuchuan ';
String s2='zifuchuan ';
此时的内存映射为
第一种情况的内存映射
此时,如果使用"=="比较两个字符串,则结果为true。 带有“”的对象存储在字符串常量池中,因为如果尝试创建相同的字符串,对该字符串的引用将直接指向该字符串,而不是创建新字符串。 此外,字符串常量池中的对象不会被java垃圾收集器回收。 此时,两个引用指向字符串常量对象,因此它们是相同的。 因为内存地址相同。
2、用第二种方法定义的两个字符串
2、字符串S1=新字符串(zifu chun ) )。
strings2=新字符串(zifu chuan ) )。
此时的内存映射如下。
第二种情况的内存映射
这是因为S1和S2分别指向完全不同的两个对象,其存储器地址也不同,所以此时用“==”比较两个字符串是否相等是不正确的。 因为String对象还包含字符串对象,所以实际上在这里创建了四个对象。
因此,要比较两个字符串是否相等,必须在equals方法中进行比较。 因为String已经重写了equals方法,所以使用equals时,建议在. equals(zifuchuan ) (而不是. equals(zifuchuan ) )中引用