搜索
写经验 领红包
 > 娱乐

equals和==有什么区别(equles和==的区别)

导语:==和equals的区别,85%的求职者“理直气壮”地回答错误

应该会有不少Java初学小伙伴上来就说:==比较的是地址值,equals比较的是值。这样回答对吗?

下面详细说下两者的区别。

==运算符对于基本数据类型来说,比较的是数值对于引用数据类型来说,比较的是地址值

下面代码示例了使用==来判断两种类型变量是否相等的结果。

public class JavaTest { // == // 对于基本数据类型,比较的是值 public static void main(String[] args) { int a = 65; double b = 65.0; char c = &39;; String str1 = new String(); String str2 = new String(); System.out.println(a == b); //true System.out.println(c == a); // true // 因为str1和str2是2个对象,对象内存地址值不一样,输出false System.out.println(str1 == str2);//false }}
equals方法

首先应该明确,equals是一个方法,只有对象才能调用,基本数据类型不能使用equals方法。其次,equals方法是定义在java.lang.Object类中的,Object类是所有类的超级父类,所以,每个对象都默认有一个继承自Object类的equals方法。

我们来看下Object类中的equals方法定义:

 public boolean equals(Object obj) { return (this == obj); }

可以看到,equals方法底层也是使用==来进行比较的。

假设有一个自定义的User类,它有一个name成员变量,有一个初始化name成员变量的构造器。现在我们创建了两个User类的实例对象,其name属性都初始化为 ,然后通过继承自Object类的equals方法,进行两个对象的比较。代码如下:

User = new User();User user2 = new User();System.out.println(user1.equals(user2));

刚才说到,equals方法比较的是引用数据类型变量的地址值,由于user1和user2是两个不同的对象,其内存地址值不一样,所以上面代码会输出false。

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

这次我们比较的是两个字符串,字符串的比较大家肯定很熟悉了,显然,上面代码会输出true。

那么,问题来了。String类和我们自定义的User类都是引用类型,为什么两者通过equals方法进行比较,输出结果不一样呢?我们不妨来看看Strig类中equals方法

 public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String aString = (String)anObject; if (coder() == aString.coder()) { return isLatin1() ? StringLatin1.equals(value, aString.value) : StringUTF16.equals(value, aString.value); } } return false; }

答案是:从上述代码中可以看到,String类重写了Object的equals方法,String类在重写的equals方法中,先比较内存地址是否一致,不一致的话,然后再比较的是字符串的字符序列是否相等。上述str1和str2的字符序列都是“刀客程序员”,所以会输出为true。

总结

下次面试官再问这个问题,可以这样回答:

==:当比较的是基本数据类型时,比较的是值;当比较的是引用数据类型时,比较的是地址值。equals:equals不能用于基本数据类型的比较;当比较的是引用数据类型时,默认也是比较地址值,只不过像String、Date、File、包装类等都重写了Object类中的equals方法,重写后比较的不再是两个对象的地址值,而是自定义的相等标准(可以是某一个或某几个属性值相等)。在实际项目开发中,常常需要重写equals方法,相等条件由业务决定。

本文内容由快快网络小熊创作整理编辑!