==解读
    对于基本类型和引用类型==的作用效果不同

    • 基本类型:比较的是指是否相同
    • 引用类型:比较的是引用是否相同

    equals解读
    equals本质上是==,只不过String和Integer等重写了equals方法,把它变成了值比较。

    1. public class Cat {
    2. public Cat(String name) {
    3. this.name = name;
    4. }
    5. private String name;
    6. public void setName(String name) {
    7. this.name = name;
    8. }
    9. public String getName() {
    10. return name;
    11. }
    12. public static void main(String[] args) {
    13. Cat cat1 = new Cat("123");
    14. Cat cat2 = new Cat("123");
    15. System.out.println(cat1.equals(cat2));//false
    16. }
    17. }

    Object的equals源码(本质上是==)

    1. public boolean equals(Object obj) {
    2. return (this == obj);
    3. }

    相同值的两个String对象,返回的是true

    1. String str1 = new String("123");
    2. String str2 = new String("123");
    3. System.out.println(str1.equals(str2));//true

    String的equals方法

    1. public boolean equals(Object anObject) {
    2. if (this == anObject) {
    3. return true;
    4. }
    5. if (anObject instanceof String) {
    6. String anotherString = (String)anObject;
    7. int n = value.length;
    8. if (n == anotherString.value.length) {
    9. char v1[] = value;
    10. char v2[] = anotherString.value;
    11. int i = 0;
    12. while (n-- != 0) {
    13. if (v1[i] != v2[i])
    14. return false;
    15. i++;
    16. }
    17. return true;
    18. }
    19. }
    20. return false;
    21. }


    String重写了Object的equals方法,比引用比较改成了值比较。
    总结:==对于基本类型来说是值比较,对于引用类型来说是引用比较;而equals默认是引用比较,很多类重写了equals方法,比如String,Integer等把它变成了值比较,所以一般情况equals比较的是值相等。