Java学习笔记之五——关于"equals"和“==”的区别

最近看到一个例子,讲的是“equals”和“==”的区别,我们来先看一下例子:

public class equal {
    public static void main(String[] args){
        String str1 = new String("qwer");
        String str2 = new String("qwer");
        String str3 = str1;
        if(str1==str2){
            System.out.println("对");
        }
        else {
            System.out.println("错");
        }
        if(str1==str3){
            System.out.println("对");
        }
        else {
            System.out.println("错");
        }
        if(str1.equals(str3)){
            System.out.println("对");
        }
        else {
            System.out.println("错");
        }
    }
}

上面这段代码最后输出的结果是:

对于这个,我来谈谈我的理解。

1,在第一个if处,“if(str1==str2)”如果成立则输出“对”但是结果输出的是“错”,那么说明str1!=str2.但是回头看代码中,对于str1和str2的赋值都为“qwer”,那为什么还不想等呢。我记得当时在学创建新对象的时候,使用的是关键词new。当时讲的是new就是在存储器中新建一个空间,然后把赋值放进去。这里既然str1和str2都是新建的,那么说明他们不在同一个空间。也就是不是相同的对象,只不过这两个对象的值相同罢了。就相当于两个人叫了同样的名字而已。

2,引用类型变量中,运算符“==”比较的是两个变量是否引用同一对象。所以,当判断str1==str3的时候,会得出“错”“对”。

3,再往下看“if(str1==str3)”,得出的是“对”,这就说明str1和str3是相等的。因为在创建str3的时候,给其赋的对象就是str1,说一str3和str1引用的是同一对象,故他们之间是“==”关系。

4,继续往下看到“if(str1.equals(str3))”,结果输出“对”,说明“str1.equals(str3)”是成立的,因为str1和str3引用变量对象的值都是"qwer",所以结果是成立的。如果程序后面再加上一句“if(str2.equals(str3){system.out.println("对");}else{system.out.println("错");}的话,我想输出的结果还会是“对”。因为str2和str3引用的对象的值都是“qwer”。


总结:

1,引用类型变量中,运算符“==”比较的是两个变量是否引用同一对象。如果要比较两个引用变量是否指向同一对象,则使用“==”来进行比较;

2,如果要比较两个引用变量对象的值是否相等,则要用对象的equals()方法进行比较;

3,如果要比较两个数值是否相等,那么必须用“==”来比较!

 

posted on 2013-01-05 00:35  liwustore  阅读(1859)  评论(8编辑  收藏  举报