关于“==”和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“比较的是值是否相同,”==“比较的是存放空间是否相同(是否属于同一个引用)

posted @ 2016-10-11 21:14  伊人叫我改名叫睿睿  阅读(88)  评论(0)    收藏  举报