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 = trueScala编译器是否足够聪明地返回相同(标识)字符串对象?我相信这个词是实习。
或者,eq实际上是在执行值相等吗?
发布于 2013-12-17 21:04:09
Scala的字符串实际上是Java.Lang.String,实际上它使用实习生-参见Scala 参考文献 -
type String = java.lang.String发布于 2013-12-17 21:11:07
奥塔维奥是对的,它应该和Java一样。
扩展一下:eq文件很好地解释了对平等方法的期望:
在重写
equals或hashCode方法时,重要的是确保它们的行为与引用相等一致。因此,如果两个对象是相互引用的(o1 eq o2),那么它们应该相等于彼此的(o1 == o2),并且它们应该散列到相同的值(o1.hashCode == o2.hashCode)。
https://stackoverflow.com/questions/20644482
复制相似问题