使用 tostring 方法创建的字符串对象在 Java 的内存中存储在哪里?

2022-09-01 17:00:00

我正在做一个作业,我得到了以下问题。

使用存储在内存中的方法创建的字符串对象在哪里?toString()

String a = Integer.toString(10);
  1. 在恒定池中
  2. 在堆上(新操作员对象的区域)

答案 1

它们都进入堆内存。只有字符串文本暂存字符串进入字符串常量池。

唯一的例外是类,如:String

public String toString() {
    return this;
}

它只返回当前字符串(如果它在堆上,它从堆返回/如果它在字符串常量池上,它从字符串常量池返回)

注意:如果未覆盖以显式返回字符串文本,则始终在堆上创建字符串表示形式(ClassName@hexValueOfHashCode)。toString()


答案 2

这取决于您正在调用的方法的实现。toString()

该方法创建对象,因此根据它执行此操作的方式(以及它是否在字符串中),返回的将位于字符串池中。toString()StringString

请注意,这只是一个像任何其他方法一样的方法。没有任何魔术可以以任何特殊方式处理方法的返回值。(例如,返回的 字符串不会自动滞留)。它的工作方式与返回 .toString()toString()toString()String