java中 == 与equals()的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GreatDistance/article/details/89304884

java中==与equals的区别是什么?

1、==

对于基本类型和引用类型 == 的作用是不同的

  1. 基本类型:比较的是值是否相同;
  2. 引用类型:比较的是引用是否相同;

代码示例:

String str1 = "Hello World!";

String str2 = "Hello World!";

String str3 = new String("Hello World!");

System.out.println(str1 == str2);       // true

System.out.println(str1 == str3);       // false

System.out.println(str1.equals(str2));  // true

System.out.println(str1.equals(str3));  // true

代码解读:因为str1和str2指向的是同一个引用,所以 == 也是true,而new String()方法则重新开辟了内存空间,所以 == 结果为false,而euqals比较的是一直是内容是否相同,所以结果都是true。

2、equals

equals本质上就是 == ,只是String 和 Integer等这些类重写了equals方法,把他变成了之比较。

 

代码示例:

public class Person {

    private String name; // 姓名

    private String sex;  // 性别



    public Person(String name, String sex) {

        this.name = name;

        this.sex = sex;

    }



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public String getSex() {

        return sex;

    }



    public void setSex(String sex) {

        this.sex = sex;

    }



    public static void main(String[] args) {

        Person person1 = new Person("张三","男");

        Person person2 = new Person("张三", "男");

        System.out.println(person1.equals(person2)); // false

    }

}

结果为false

查看equals源码就明白了

public boolean equals(Object obj) {

        return (this == obj);
}

在Object类中eqlals的本质就是 ==

为什么两个相同值的String对象,为什么返回的就是true?原因是String类重写了equals方法把引用比较改成了值比较,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;

    }

总结: == 对于基本类型来说是值比较,对于引用类型来说比较的是引用;而equals默认情况下是引用比较,只是很多类重写了equals如(String,基本类型对应的包装类)等把它变成了值比较,所以一般情况下equals比较的是值是否相等。

猜你喜欢

转载自blog.csdn.net/GreatDistance/article/details/89304884