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
实际上是否正在执行值相等?
答案 0 :(得分:9)
Scala的字符串实际上是Java.Lang.String,实际上使用实习 - 请参阅Scala Reference -
type String = java.lang.String
答案 1 :(得分:2)
Otávio是对的,它应该和Java一样。
要扩展:documentation of eq对平等方法的期望有很好的解释:
覆盖
equals
或hashCode
方法时,务必确保其行为与引用相等一致。因此,如果两个对象是彼此引用(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那么打印下面的声明。