==和eq运算符

时间:2013-12-17 20:55:51

标签: scala

scala> val x = "a"
x: String = a

scala> val y = "a"
y: String = a

据我了解,==会调用equals(值相等)。

scala> x == y
res18: Boolean = true

但是,x eq y,对我来说意外,显示为真。据我所知,eq会检查object identity

scala> x eq y
res19: Boolean = true

Scala编译器是否足够智能以返回相同的(标识)String对象?我相信这个词是interning

或者,eq实际上是否正在执行值相等?

3 个答案:

答案 0 :(得分:9)

Scala的字符串实际上是Java.Lang.String,实际上使用实习 - 请参阅Scala Reference -

type String        = java.lang.String

答案 1 :(得分:2)

Otávio是对的,它应该和Java一样。

要扩展:documentation of eq对平等方法的期望有很好的解释:

  

覆盖equalshashCode方法时,务必确保其行为与引用相等一致。因此,如果两个对象是彼此引用(o1 eq o2),则它们应该彼此相等(o1 == o2)并且它们应该散列为相同的值(o1.hashCode == o2.hashCode)

答案 2 :(得分:-7)

我是一个非常新的程序员。希望我能用你的小知识帮助你。 通常=“相等”符号为变量赋值。但==“double equal”测试该变量的值。

示例:

x = 5

表示为变量x赋值5。或者将X的值更改为5.

但是x == 5是测试x的值,如果它等于5。

因此应用程序就像那样(在C中)

if (x == 5) 
{
printf("The value of x is 5");
}

所以这里的程序正在测试如果X的值等于5那么打印下面的声明。