java - Java 是创建新的字符串还是指向原始字符串的指针?

标签 java

我想知道 Java 是否创建过指向其他字符串的指针。

一个可能是指针的示例:

App app = new App("name");
String name = app.getName();

如果我在String name初始化后使用app.setName("newName")更改值,则String name的值获胜不改变。 这表明 String name 不是指针,而是一个新字符串。

但也有可能,对吧?我的意思是它可能是一个指针,直到更改任何一个值(应用程序中的字符串名称或字符串名称)以节省内存?

那么它是一个指针吗?

与:String Interning 不同的问题 其中特别要求对 String Interning 进行解释。例如 String.intern()

最佳答案

app.setName("newName") 将创建一个新字符串“newName”并将其存储在字符串池中,app 中的字符串指针现在被替换为指向新字符串。 “name”字符串仍然存在。

要记住的关键一点是Java字符串对象永远改变,如果你创建一个新的字符串,或者修改一个旧的字符串,它总是会导致创建一个新的对象。另外,String 是一个对象,因此 String 变量始终存储对其他位置存储的 String 的引用(在带有其他变量的堆中,或在 String 常量池中)。

关于java - Java 是创建新的字符串还是指向原始字符串的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40783820/

相关文章:

java - 将逗号分隔的文本文件读取到 HashMap 中,其中文件在多行中具有相同的键 Java

Java NullPointerException 即使对象存在

java - 如何在java中打印void

java - 服务无法启动 : error 1067: the process terminated unexpectedly

java - 在 SWT 中强制外观/感觉

java - 初始化为 null 和不初始化为 null 的内存使用情况

java - 如何编写注释/方面以不进入方法但在给定条件为 false 时返回 null?

java - 如何使用正则表达式仅获取 `(` 和 `)` 之间的字符?

java - JCR 存储库同步 API

java - 如何在Java代码中启动一组线程