gpt4 book ai didi

java - SCP内存位置中的对象

转载 作者:行者123 更新时间:2023-12-02 10:29:45 25 4
gpt4 key购买 nike

String s = new String("test");

对于上面的内容,创建了一个对象用于测试,但是如果我在不使用 new 关键字的情况下将一个字符串文字分配给一个字符串变量,那么在 SCP 中为其创建的内存会被视为一个对象吗? ?如果是这样,如果没有 new 关键字,怎么会发生这种情况?

String s = "test";

我的意思是“test”会被视为一个对象吗?

最佳答案

String s = "test";

这里 s 将引用一个interned String 对象。这意味着,字符序列“test”将存储在一个中心位置,每当再次使用相同的文字“test”时,JVM 将不会创建新的 String 对象,而是使用缓存的 String 的引用。

String s1 = new String("test");

String s、s1 都给你 String 对象,但它们之间有细微的区别。当您使用 new() 运算符创建 String 对象时,它总是在堆内存和 SCP 中创建一个新对象。另一方面,如果您使用字符串文字语法创建对象,例如“test”,它可能会从 String 池(Perm gen 空间中 String 对象的缓存,现在在最近的 Java 版本中移至堆空间)返回一个现有对象(如果它已经存在)。否则,它将创建一个新的字符串对象并将其放入字符串池中以供将来重用,因此在本例中我们有:

s1 == s // is false
s1.equals(s) // is true

关于java - SCP内存位置中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53680920/

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