Scala实习:不同的初始化如何影响比较



我是Scala的新手,但我懂Java。因此,据我所知,不同之处在于Scala中的==充当Java中的.equals,这意味着我们正在寻找值;Scala中的eq在Java中充当==,这意味着我们正在寻找引用地址而不是值。

但是,运行以下代码后:

val greet_one_v1 = "Hello"
val greet_two_v1 = "Hello"
println(
(greet_one_v1 == greet_two_v1),
(greet_one_v1 eq greet_two_v1)
)

val greet_one_v2 = new String("Hello")
val greet_two_v2 = new String("Hello")
println(
(greet_one_v2 == greet_two_v2),
(greet_one_v2 eq greet_two_v2)
)

我得到以下输出:

(true,true)
(true,false)

我的理论是,这些字符串的初始化是不同的。因此,val greet_one_v1 = "Hello"val greet_one_v2 = new String("Hello")有何不同?或者,如果我的理论不正确,为什么我会有不同的输出?

正如Luis Miguel Mejía Suárez正确回答的那样,答案在于字符串互联,这是JVM(Java虚拟机(自动执行的一部分。要启动一个新的String,它需要像上面的例子一样显式启动;否则,出于优化原因,Java将为相同的值分配相同的内存。

最新更新