1.说明
比较基本数据类型时
java、scala 都是 对值的比较
比较引用类型时
java中的 == 比较的是 引用相等性(两个变量在jvm中是否指向的是同一个对象)
equals 由具体实现决定(默认继承Object的实现,比较的HashCode)
在java中 == 和 equals 并不相同
scala中的 == 实际是调用的 equals方法
2.scala 代码示例
class IntScala(val i: Int) {
override def equals(obj: Any): Boolean = {
this.i == obj.asInstanceOf[IntScala].i
}
}
object TestIntScala extends App {
val i1 = new IntScala(1)
val i2 = new IntScala(1)
/*
* IntScala 没有实现 equals 方法时,使用 java.lang.Object 的 equals 方法
* 比较的是 hashCode 的值
* 当我们实现 equals 方法时 (比较 i的值)
* == 和 equals 是相同的
*
* */
//
println(i1 == i2) // false
println(i1.equals(i2)) // false
}
3.java代码示例
class IntJava {
public int i;
public IntJava(int i) {
this.i = i;
}
@Override
public boolean equals(Object obj) {
IntJava obj1 = (IntJava) obj;
return this.i == obj1.i;
}
public static void main(String[] args) {
IntJava i1 = new IntJava(1);
IntJava i2 = new IntJava(1);
// java中 == ,不会受equals方法的实现逻辑所影响
// 永远比较的是 两个对象引用的相等性
System.out.println(i1 == i2);
System.out.println(i1.equals(i2));
}
}