Java
1. 对于==
- 如果作用于基本数据类型的变量,则直接比较其存储的"值"是否相等;
- 如果作用于引用类型的变量,则比较的是引用所指向的对象的地址;
2. 对于equals方法
- 注意:equals方法不能作用于基本数据类型的变量,且String str1 = "abc"其作用于常量池中
- 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;作用和"=="是一样的,这一点我们从源码中看出来
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}- 诸如String、Date、Double和Integer等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
3. 补充部分
- 对于对象的比较,我们不仅要重写两个对象的"equals()"方法,而且还要重写"hashCode"方法,在保证"equals()"方法想等到同时,还要保证"hashCode"方法也要相等。
- 使用方面的建议:在平常的使用中如果要比较基本数据类型则使用"=="方法,如果比较的是引用数据类型则使用"equals()"方法。在此与诸君共勉
Scala
1. Scala中"equals"
equals比较的是值是否相等
2. Scala中的"eq"
比较对象在JVM中的内存地址是否是同一个,和Java中的"=="作用一样。
3. Scala中"==”
==,如果比较的对象是null,==调用的是eq方法,如果比较的对象不是null,调用的是equals方法 。
比较字符串,比较对象。对于所有的数据都可以使用,值对象类型(AnyVal)和 引用对象类型(AnyRef)都可以,但是唯有一个场景不适用即:null == null ,所以我们称""为非空的equals比较。