==解读
对于基本类型和引用类型==的作用效果不同
- 基本类型:比较的是指是否相同
- 引用类型:比较的是引用是否相同
equals解读
equals本质上是==,只不过String和Integer等重写了equals方法,把它变成了值比较。
public class Cat {public Cat(String name) {this.name = name;}private String name;public void setName(String name) {this.name = name;}public String getName() {return name;}public static void main(String[] args) {Cat cat1 = new Cat("123");Cat cat2 = new Cat("123");System.out.println(cat1.equals(cat2));//false}}
Object的equals源码(本质上是==)
public boolean equals(Object obj) {return (this == obj);}
相同值的两个String对象,返回的是true
String str1 = new String("123");String str2 = new String("123");System.out.println(str1.equals(str2));//true
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重写了Object的equals方法,比引用比较改成了值比较。
总结:==对于基本类型来说是值比较,对于引用类型来说是引用比较;而equals默认是引用比较,很多类重写了equals方法,比如String,Integer等把它变成了值比较,所以一般情况equals比较的是值相等。
