equals方法
我们知道每个类其基类都是Object,Object默认的equals方式是:
public boolean equals(Object obj) {if (this == obj) {//先进行地址比较return true;}
上面可以看出Object的equals方法比较两个对象的地址是否相等。
接着我们来说下String的equals方法实现源码:
public boolean equals(Object anObject){/** 首先判断两个对象地址是否相等*/if(this == anObject){return true;}/** 其次判断对象是否为String类的实例对象*/if(anObject instanceof String){//强制转换为String类型String anotherString = (String)anObject;//获取调用String对象的字符串长度int n = value.length;/**如果长度相同,接着判断字符串是否相同*/if(n == anotherString.value.length){//String转换成char数组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;}
}
从源码中,我们可以看出String的equals方法,判断对象的值或者是地址是否相等。
接着我们再来看StringBuffer的equals
StringBuffer继承自AbstractStringBuilder类和实现的Serializable、CharSequence接口都没有equals方法,但是StringBuffer的equals从何而来,java所有类都是Object子类,其用来比较两个对象的地址是否相同,不能用于字符串内容比较操作
总结
因此我们使用equals方法需要根据应用场景做选择