Java基础之equals方法

2016-04-13  本文已影响56人  M_JCs

1、关于equals方法

equals方法是基类Object中的方法,因此对于所有的继承于Object的类都会有该方法。为了更直观地理解equals方法的作用,直接看Object类中equals方法的实现。该方法定义在Object类中,其源码如下:

/**
*Object.class
*/
public boolean equals(Object obj) {
        return this == obj;
    }

很显然,在Object类中,equals方法是用来比较两个对象的引用是否相等,即是否指向同一个对象。

2、关于字符串的比较

先看如下代码:

public class Main { 
    public static void main(String[] args) {
        String str1 = "abcd";//line 1
        String str2 = new String(str1);// line 2
        String str3 = "abcd";//line 3
        String str4 = new String("abcd"); //line 4
        String str5 = str1;//line 5
        str5 = str5.concat("ef");//line 6
        System.out.println(str1==str3);        
        System.out.println(str1==str2);              
        System.out.println(str2==str4);        
        System.out.println(str1==str5);
        System.out.println(str1.equals(str3));
        System.out.println(str1.equals(str2)); 
        System.out.println(str2.equals(str4));
        System.out.println(str1.equals(str5));
    }
}

由上一篇博客Java基础之String可知后四行的打印结果为:true,true,true,fasle,对于最后一个false结果比较容易理解,str1的字符串内容为“adcd”,str5的内容为“abcdef”,两者显然不相同,故结果为false,而对于前三个结果,又该如何解释呢?
先看String类源码中的equals方法:

/**
*String.class
*/
public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj instanceof String) {
            String s = (String) obj;
            int i = value.length;
            if (i == s.value.length) {
                char ac[] = value;
                char ac1[] = s.value;
                for (int j = 0; i-- != 0; j++)
                    if (ac[j] != ac1[j])
                        return false;
                return true;
            }
        }
        return false;
    }

看到这里我们应该明白了,原来String类对equals方法进行了覆写,用来比较指向的字符串对象所存储的字符串是否相等,从String类的equals方法可知,在equals方法中先进行引用对象的比较,如果两者指向的内存空间相同,及两者指向的为同一内存空间,字符串内容一定相同,直接返回true,如果两者指向的内存空间不同,在进行字符串内容的比较,如果内容完全相同,直接返回true,否则返回false。

3、关于其他类型

其他的一些类诸如Double,Date,Integer等,都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等。

4、关于关系操作符“==”

关于关系操作符“==”在《Java编程思想》中有这样一句描述:
关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系
先看如下代码:

public class Main { 
    /**
     * @param args
     */
    public static void main(String[] args) {
        int m=3; 
        int n=3;      
        System.out.println(m==n); 
        String str = new String("hello");
        String str1 = new String("hello");
        String str2 = new String("hello"); 
        System.out.println(str1==str2); 
        str1 = str;
        str2 = str;
        System.out.println(str1==str2);
    } 
}

输出结果为 true false true;

5、总结

上一篇 下一篇

猜你喜欢

热点阅读