"==" 、equals比较运算符、toString() 的一点分析

来源:互联网 发布:java中int的范围 编辑:程序博客网 时间:2024/06/02 00:25

java中,所有的类都是继承于Object类。

Object源码中对于equals()方法的定义如下,即直接调用了“==”,判断的是两个对象的地址是否相同。

 public boolean equals(Object obj) {        return (this == obj);    }
如果要判断其值是否相同,则需要重写equals()方法,String类为什么调用equals方法比较的是值,而不是址,就是因为进行了重写。String类中equals()源码如下。

 public boolean equals(Object anObject) {        if (this == anObject) {            return true;        }        if (anObject instanceof String) {            String anotherString = (String) anObject;            int n = value.length;            if (n == anotherString.value.length) {                char v1[] = value;                char v2[] = anotherString.value;                int i = 0;                while (n-- != 0) {                    if (v1[i] != v2[i])                            return false;                    i++;                }                return true;            }        }        return false;    }

与此相似的是toString()方法,

Object类的源码中,toString()方法返回的是该对象实现的类名+@+hashcode值。

 public String toString() {        return getClass().getName() + "@" + Integer.toHexString(hashCode());    }
String类中的源码,返回的是它本身。

    /**     * This object (which is already a string!) is itself returned.     *     * @return  the string itself.     */    public String toString() {        return this;    }
所以当我们自定义一个类的时候,如果想通过toString()方法来获取这个类的相关属性,都要重写toString()方法。如下所示:

public class Person {private int id;private String name;public Person(int id, String name) {super();this.id = id;this.name = name;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + "]";}}




1 0
原创粉丝点击