equals的用法
equals的用法
未被重写的equals()方法本质上其实等同于“==”号的比较,比较的是内存地址是否相同。
如果想要特定地比较两个对象的实质内容是否相同,需要自己重写,至于怎么比较可以按需编写。
public class TestEQ {
public static void main(String[] args) {
Cat1 c1 = new Cat1(1,2,3);
Cat1 c2 = new Cat1(1,2,3);
System.out.println(c1==c2);//false,两个对象内存地址不同
System.out.println(c1.equals(c2));//true,重写后的equals()方法比较的是对象中的内容
//在未重写equals方法前,这两个比较实质上是相同的。
String s1 = new String("Hello?");
String s2 = new String("Hello?");
System.out.println(s1.equals(s2));//返回true,因为String类本身自己重写了equals()方法
}
}
class Cat1 {
int color,height,weight;
public Cat1(int c, int h ,int w) {
color = c;
height = h ;
weight = w;
}
//
public boolean equals(Object obj) {
if(obj == null) {
return false;
}else if(obj instanceof Cat1) {
Cat1 a = (Cat1) obj;
if(a.color == this.color && a.height == this.height && a.weight == this.weight) {
return true;
}
}
return false;
}
}
有些类本身自带重写了equals方法,比如说String类。
ps:今天运行程序的时候遇到了老师说的一个运行问题:当我在一个文件夹上定义了一个cat类,另外一个文件夹下也有一个同名类的时候,很有可能发生冲突。因为当我们new一个对象的时候,系统会按照classpath的路径顺序一个个找class文件,如果不把当前路径放在classpath的第一位的话,很有可能找的是别的文件夹下的同名类,导致运行出错。因此,需要记得把当前目录放在classpath第一位 。不过,老师说eclipse已经解决这种问题了。
另外,在写方法的时候,在API文档中能拷贝就不要自己敲出来,很容易出错。