如果你想比较一下看看两个对象是否相等,可以使用或者==,或它的反义 !=。(对所有对象都适用,而不仅仅是基本数据类型)
1
2
3
4
|
scala>
1
==
2
res24: Boolean =
false
scala>
1
!=
2
res25: Boolean =
true
|
这些操作对所有对象都起作用,而不仅仅是基本类型。例如,你可以用他比较列表:
1
2
3
4
|
scala> List(
1
,
2
,
3
) == List(
1
,
2
,
3
)
res27: Boolean =
true
scala> List(
1
,
2
,
3
) == List(
4
,
5
,
6
)
res28: Boolean =
false
|
进一步,你还可以比较不同类型的两个对象:
1
2
3
4
|
scala>
1
==
1.0
res29: Boolean =
true
scala> List(
1
,
2
,
3
) ==
"hello"
res30: Boolean =
false
|
你甚至可以比较null,或任何可能是null 的东西。不会有任何异常被抛出:
1
2
3
4
|
scala> List(
1
,
2
,
3
) ==
null
res31: Boolean =
false
scala>
null
== List(
1
,
2
,
3
)
res32: Boolean =
false
|
(但比较:null == null)时就报错了)
1
2
3
|
规则:首先检查左侧是否为
null
,如果不是,调用equals
方法。由于equals是一个方法,因此比较的精度取决于左手边的参数。又由于已经有一个
自动的
null
检查,因此你不需要手动再检查一次了。
|
这种类型的比较对于不同的对象也会产生 true,只要他们的内容是相同的并且它们的
equals 方法是基于内容编写的。例如,以下是恰好都有五个同样字母的两个字串的比较:
1
2
|
scala> (
"he"
+
"llo"
) ==
"hello"
res33: Boolean =
true
|
Scala 的==与Java的有何差别
Java 里的既可以比较基本类型也可以比较引用类型。对于基本类型,Java 的==比较 值比较,如Scala。然而对于引用类型,Java 的==比较了引用的是否为同一个对象(比较内存地址),也就是说这两个变量是否都指向于JVM 堆里的同一个对象。Scala 也提供了这 种机制,名字是 eq。不过,eq和它的反义词,ne,仅仅应用于 可以直接映射到Java的对 象。 |
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
object BitOpt {
class
A{}
def main(args:Array[String]){
val a =
new
A
val b =
new
A
println(a==b)
println(a eq b)
println(a ne b)
println(!a.eq(b))
}
}
结果:
false
false
true
true
|