== 和 equals 的区别

it2022-05-05  140

== 和 equals 的个人理解

==的使用基本数据类型引用数据类型 equals()的使用总结 Java中判断两个变量是否相等有两种方式,分别是 == 和 equals

==的使用

基本数据类型

基本数据类型指的是byte,short,int,long,float,double,char,boolean。 对这些基本数据类型判断是:值是否相等

int a = 10; Double b = 10.0D; System.out.println(a == b); // true

引用数据类型

引用类型指的是继承自Object类的对象。 对于引用数据类型判断是:内存地址是否相等,即是否同一个对象

String s1 = new String("zyn"); String s2 = new String("zyn"); System.out.println(s1 == s2); // false

equals()的使用

equals()是基类Object的方法,所有继承自Object类的对象都可使用,一般会被继承类所重写,用来实现特定的比较。 我们看一下Object类中equals的实现,可以看到如果未重写equals方法,判断两个对象的内存地址是否相等

// Object类中的equals实现 public boolean equals(Object obj) { return (this == obj); }

再来看一下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类重写了equals()方法,判断的是传入对象的字符串是否相等。

String s1 = new String("zyn"); String s2 = new String("zyn"); System.out.println(s1.equals(s2)); // true

关于String的equals方法这里应注意: str.equals(“zyn”)这种写法有可能会出现NullPointerException,应改为zyn.equals(str)这种写法来避免异常

总结

判断两个对象是否为同一对象,两个基本数据类型是否相等使用== 判断两个对象的内容是否相等,则需要重写equals实现相应逻辑


最新回复(0)