【问题标题】:Strings and RAM usage [duplicate]字符串和 RAM 使用 [重复]
【发布时间】:2019-12-05 02:54:37
【问题描述】:

考虑以下代码。

String s = "Hello"; 
s = "Good Bye";
s = "Hello";

我了解代码的前两行为字符串对象“Hello”和“Good Bye”分配 RAM。但是,第三行是为另一个“Hello”创建第三个 RAM 位置还是 s 引用了第一个“Hello”的位置?

【问题讨论】:

  • @maytham-ɯɐɥʇʎɐɯ 错了,s 在第一行代码和第三行代码之后指的是同一个对象,因为两个 "Hello" 字符串都指的是从类的常量池。

标签: java string object ram


【解决方案1】:

不可变字符串的内存是静态分配的。当“s”被分配给不同的值时,先前的引用被删除,“s”现在指向一个新的位置。所有字符串都存储在编译后的字节码文件中。垃圾收集器甚至不涉及这种情况。由编译器来识别第一个和第二个 Hello 是相同的。您可以使用字符串抓取器查看字节码二进制文件中有多少 Hello。

【讨论】:

    【解决方案2】:

    是的,只是谷歌 java 内存模型。 如果 s=new 字符串(“你好”); s 指的是另一个位置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-25
      • 2013-10-25
      • 2013-03-06
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      相关资源
      最近更新 更多