呵呵......这个算赚技术分贴莫,呵呵,开玩笑的。
在Java中Object类中的equals方法底层跟"=="是一样的,都是比较内存地址值,不同点是:
1、equals()是方法,因此子类们可以对其进行复写,因此equals方法的比较方式就会发生变化;
2、从JDK1.5版本开始,逻辑比较符“==”有了限制,开始跟Object类的equals()方法不同,因为安全性等情况,JDK1.5起的"=="只能比较同种数据类型间的.class字节码(是否能扩大到"只能比较同种数据类型",这个有点记不清了,可以去验证下,呵呵);而equals()方法还是能比较不同数据类型间的.class。
【这个也是可以去验证的,如果学到高新技术视频中的反射等知识,应该就会遇见这种情况;当然它和泛型是一样的,是伪的,即只在编译时会检测类型限定,因此可通过反射对其进行不同数据类型间.class的比较。】个人见解,可能有所不足,欢迎提出不同见解相互学习,O(∩_∩)O~........也仅供参考,呵呵 作者: liuzhming 时间: 2013-7-22 00:25
相等性的比较(==)对于原生数据类型来说,比较的是左右两边的值是否相等;对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。
equals()方法,该方法定义在Object类当中,因此Java中的每个类都具有该方法。对于Object类的equals()方法来说,它是判断调用equals方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于Object类的equals()方法来说,它等价于==。
对于String类的equals方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。对于String对象的相等性判断来说,使用equals方法,而不是使用==。
public class test {
public static void main(String[] args)
{
int i = 1;
int j = 1;
System.out.println(i == j);//返回true,对原生数据类型来说,比较的是左右两边的值是否相等
Object object1 = new Object();
Object object2 = new Object();
System.out.println(object1 == object2);//返回false,Object类型比较是否指向同一个地址
Object object3 = new Object();
Object object4 = new Object();
System.out.println(object3.equals(object4));//返回false,对Object来说,equals等价于==
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);//返回false,判断引用地址是否相同
System.out.println(s1.equals(s2));//返回true,判断字符串内容是否相同
}
} 作者: 月亮人生 时间: 2013-7-22 00:30
String str1 = new String("str");
String str2 = new String("str");
System.out.println("==比较: "+(str1==str2));
System.out.println("equal比较:"+ str1.equals(str2));