== 和equals的比较
这两个比较的都是地址,但是为什么说一般比较字符串是使用equals方法呢?
因为在String类下,重写了equals方法
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
} else {
if (anObject instanceof String) {
String aString = (String)anObject;
if (this.coder() == aString.coder()) {
return this.isLatin1() ? StringLatin1.equals(this.value, aString.value) : StringUTF16.equals(this.value, aString.value);
}
}
return false;
}
由源码可以看出方法被重写,之后比较的就是具体的内容了
再比如
public static void main(String[] args) {
Computer c1 = new Computer("联想",24);
Computer c2 = new Computer("联想",24);
System.out.println(c1 == c2);
System.out.println(c1.equals(c2));
System.out.println(c1.toString());
System.out.println(c2.toString());
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QdEuNpIs-1594039266511)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200706203655835.png)]
如果是这样比较的话,由结果我们可以清楚的看到结果都是false,因为两个比较的都是地址,只有我们自己重写了equals方法之后才能比较具体内容是否一样
@Override
public boolean equals(Object obj) { //Object obj = new Person();
if (this == obj) {
return true;
}
//obj是否指向Computer类型的对象
if(obj instanceof Computer) {
Computer c = (Computer) obj;
return this.size == c.size && this.brand.equals(c.brand);
}
return false;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZhTmL9JD-1594039266514)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200706203856042.png)]
由此可以看出equals比较的结果就是true了,所以我们要注意!!!