基本数据类型指的是byte,short,int,long,float,double,char,boolean。 对这些基本数据类型判断是:值是否相等
int a = 10; Double b = 10.0D; System.out.println(a == b); // true引用类型指的是继承自Object类的对象。 对于引用数据类型判断是:内存地址是否相等,即是否同一个对象
String s1 = new String("zyn"); String s2 = new String("zyn"); System.out.println(s1 == s2); // falseequals()是基类Object的方法,所有继承自Object类的对象都可使用,一般会被继承类所重写,用来实现特定的比较。 我们看一下Object类中equals的实现,可以看到如果未重写equals方法,判断两个对象的内存地址是否相等
// Object类中的equals实现 public boolean equals(Object obj) { return (this == obj); }再来看一下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; }我们可以看到,String类重写了equals()方法,判断的是传入对象的字符串是否相等。
String s1 = new String("zyn"); String s2 = new String("zyn"); System.out.println(s1.equals(s2)); // true关于String的equals方法这里应注意: str.equals(“zyn”)这种写法有可能会出现NullPointerException,应改为zyn.equals(str)这种写法来避免异常
判断两个对象是否为同一对象,两个基本数据类型是否相等使用== 判断两个对象的内容是否相等,则需要重写equals实现相应逻辑