今日面试遇到一道面试题,比较字符串,字符串的内容相同,但是创建方式不同,先上题:
public class StringCompare {
public static void main(String[] args) {
String str1 = "com";
String str2 = new String("com");
String str3 = "c";
String str4 = "om";
String str5 = "c" + "om";
String str6 = str3 + str4;
System.out.println("str1 == str2: " + str1 == str2); // 写出输出结果
System.out.println("str1 == str5: " + str1 == str5);
System.out.println("str2 == str5: " + str2 == str5);
System.out.println("str1 == str6: " + str1 == str6);
System.out.println("str5 == str6: " + str5 == str6);
System.out.println(str1.intern());
}
}
运行结果:
可以看到,结果全为false。
总结:
Java中,如果两个字符串是这样 Sting a=“a” 赋值方式时百,同样也可以使用 等等 来比较是否相等,但实际上也不是在比较两个变量的内容,当新一度个变量赋值时( Sting a=“a” 赋值方式会把值放到栈中)先会从栈中找是否有相同的值,如果有就会直接指向那个值知,所以使用 等等 也可比较是否相等。
但如果是new String(“a”)这样new出字道符串对象时,即使内容完全一样,使用 等等 比较也是false,因为==比较的是堆内存中版的地址,所以只能是用equals()方法比较内容。