最近开始复习JAVA,在看JAVA编程思想的时候遇到了关于==的问题,于是我将其扩展了一下并且将其和equals作对比并且进行分析。
先上代码
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
String str4 = new String("abc");
System.out.println(str1 == "abc");// true
System.out.println(str1 == str2);// true
System.out.println(str1 == str3);// false
System.out.println(str1.equals(str3));// true
System.out.println(str3 == str4);// false
System.out.println(str3.equals(str4));// true
注释是运行结果
接下来一一分析,首先java中的 == 是比对双方的内存地址是否相等的,而str1其实就是指向字符串"abc"的地址的,并不是比对本身,所以str1 == abc。而str2也同样是指向"abc"的,所以str1 == str2。
str3指向的是new 出来的对象,而str4指向的有是一个新的构造对象所以str3!=str4。
而equals则是判断双方的字符串内容是否相同,所以str1 == tr3,str3 == str4。
(顺便一提,最初设计的时候Object的equals就是比对内存地址)
最后再画一个图,用以解释上面的分析: