关于“==”和equal的尝试
public class equalDemo { //主方法 public static void main(String[] args){ //定义一个字符串str1 String str1 = "string"; //str2直接等于str1 String str2 = str1; //重新定义str3 String str3 = "string"; //new一个str4 String str4 = new String("string"); //可看出str1和str2、str3指向相同的地址 System.out.println(str1==str2); System.out.println(str1.equals(str2)); System.out.println(str1==str3); System.out.println(str1.equals(str3)); //str4和str1值一样,但是存放的地址不同 System.out.println(str1==str4); System.out.println(str1.equals(str4)); } }
true true true true false true
我们由上一篇内存的分析,知道堆是存放new的对象的,显然,str1、str2、str3在存放时只有执行str1时构造了一个存放“string”的内存空间,剩下的均指向相同点的地址;
而str4因为重新new了一个对象,所以在堆中重新打开一个空间存放值相同的”string“,值相同当存放位置不同,所以使用”==“时出现false。
总结:”equal“比较的是值是否相同,”==“比较的是存放空间是否相同(是否属于同一个引用)

浙公网安备 33010602011771号