gpt4 book ai didi

string - Scala 实习 : how does different initialisation affect comparison?

转载 作者:行者123 更新时间:2023-12-05 07:09:08 26 4
gpt4 key购买 nike

我是 Scala 的新手,但我了解 Java。因此,据我了解,区别在于 Scala 中的 == 充当 Java 中的 .equals ,这意味着我们正在寻找值(value); 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 正确回答的那样,答案在 String Interning 中。这是 JVM(Java 虚拟机)自动执行的操作的一部分。要启动一个新的字符串,需要像我上面的例子一样显式地启动它;否则,出于优化原因,Java 将为相同的值分配相同的内存。

关于string - Scala 实习 : how does different initialisation affect comparison?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61685161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com