equals和==的区别
基本数据类型和引用数据类型
基本数据类型
- double(8), long(8), int(4Byte), float(4),short(2),char(2),byte(1), boolean()
引用数据类型
- 类, 接口, 数组
equals和==的区别
== 比较值是否相等
- 作用于基本数据类型的变量,则直接比较其存储的值是否相等
- 作用于引用类型的变量,则比较的是所指向的对象的地址是否相等,即是否是同一个对象
1
其实==比较的不管是基本数据类型,还是引用数据类型的变量,比较的都是值,只是引用类型变量存的值是对象的地址.
equals
- equals()方法存在于Object类中,而Object类是所有类的直接或间接父类,所以说所有类中的equals()方法都继承自Object类,在没有重写equals()方法的类中,调用equals()方法其实和使用==的效果一样,比较是否是同一个对象。
- 不过,Java提供的类中,有些类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值,比如String类。
== null
为什么用 == null
,而不用 equals(null)
?
obj.equals(null)
如果obj
也为null
的话,会抛出空指针异常
重写equals方法必须重写hashcode
如果两个对象a,b。a.equals(b)
为 true
;那么a.hashcode()
就必须等于 b.hashcode()
。这是 hashCode()
和 equals()
方法的一致性要求。
equals中参与比较的属性必须全部使用到hashcode的计算中来。
1 |
|
以下代码输出什么?
1 |
|
s3 = s1.intern();
这行代码会检查字符串常量池中是否已经存在内容为 “ab” 的字符串,如果有则返回常量池中这个字符串的引用,没有则将s1
的内容添加到常量池中并返回引用。由于常量池中已经有了内容为 “ab” 的字符串(即s2
所指向的那个),所以s3
会指向常量池中的这个字符串。String类的hashcode方法是根据内容来生成hashcode的
equals和==的区别
https://payfish.github.io/2024/05/12/Java中equals和-的区别/