乐趣区

关于scala:Scala与Java中与equals用法总结

在 Java 和 Scala 语言中,== 和 equals 的用法是略有不同的,如果不比照学习,容易产生困惑,当初来比照总结。

一、Java 当中的数据类型和“==”的含意:

根本数据类型:byte,short,char,int,long,float,double,boolean。他们之间的比拟,利用双等号(==), 比拟的是他们的值。

援用数据类型:当他们用(==)进行比拟的时候,比拟的是他们在内存中的寄存地址(确切的说,是堆内存地址)。

注:对于第二种类型,除非是同一个 new 进去的对象,他们的比拟后的后果为 true,否则比拟后后果为 false。因为每 new 一次,都会从新开拓堆内存空间。

二、Java 中 equals() 办法介绍:

JAVA 当中所有的类都是继承于 Object 这个超类的,在 Object 类中定义了一个 equals 的办法,equals 的源码是这样写的:

public boolean equals(Object obj) {

//this – s1

//obj – s2

return (this == obj);

}

能够看到,这个办法的初始默认行为是比拟对象的内存地址值,一般来说,意义不大。所以,在一些类库当中这个办法被重写了,如 String、Integer、Date。在这些类当中 equals 有其本身的实现(个别都是用来比拟对象的成员变量值是否雷同),而不再是比拟类在堆内存中的寄存地址了。

所以说,对于复合数据类型之间进行 equals 比拟,在没有覆写 equals 办法的状况下,他们之间的比拟还是内存中的寄存地位的地址值,跟双等号(==)的后果雷同;如果被复写,依照复写的要求来。

咱们对下面的两段内容做个总结吧:

== 的作用:

根本类型:比拟的就是值是否雷同

援用类型:比拟的就是地址值是否雷同

equals 的作用:

援用类型:默认状况下,比拟的是地址值。

注:不过,咱们能够依据状况本人重写该办法。个别重写都是主动生成,比拟对象的成员变量值是否雷同

在 Scala 中对于 == 和 equals 办法的应用有所不同,== 的实现很用心,当调用 == 操作符时,会首先查看左侧是否为 null,若不为 null,则调用 equals 办法,而调用的 equals 办法的具体比拟逻辑,则取决于左侧参数的类型,对于根底数据类型以及 String 类型来说,equals 办法的逻辑次要为比拟两者的值是否相等。所以在 Scala 中,当你调用 == 或者 equals 办法时,更多的失去是二者的值是否相等(除非你比拟的对象类型重写了 equals 办法,实现了本人的比拟逻辑),而且很显著应用 == 比 equals 更平安,因为 == 会首先确认左侧对象是否为 null,防止了空指针异样。如果你想比拟两个对象的援用是否相等,Scala 为用户提供了 eq 办法。总结如下:

==、equals 的作用:

比拟值相等性,== 会首先判断左侧对象是否为 null,而后调用对象类型的 equals 办法,更平安。

Eq 办法的作用:

比拟援用相等性。

关键词:java 培训

退出移动版