标量实习:不同的初始化如何影响比较?

问题描述 投票:3回答:1

我是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")有何不同?或者,如果我的理论不正确,为什么我会有不同的输出?

string scala
1个回答
0
投票

由Luis MiguelMejíaSuárez正确回答,答案在于String Interning,这是JVM(Java虚拟机)自动执行的操作的一部分。要启动一个新的String,需要像上面我的示例一样显式启动它。否则,出于优化原因,Java将为相同的值分配相同的内存。

© www.soinside.com 2019 - 2024. All rights reserved.