java - 赋值和创建字符串实例有什么区别?

标签 java string memory

在一个面试问题中,面试官问我

以下说法的共同点和区别是什么:

String s = "Test";

String s = new String("Test");

内存分配有区别吗?

最佳答案

String s = "Test"; 

将首先在字符串常量池中查找字符串“Test”。如果 found s 将引用找到的对象。如果没有找到,则创建一个新的 String 对象,将其添加到池中,并使 s 引用新创建的对象。

String s = new String("Test");

将首先创建一个新的字符串对象并让 s 引用它。此外,在字符串常量池中创建了字符串“Test”的条目,如果它还没有。

所以假设字符串“Test”不在池中,第一个声明将创建一个对象,而第二个声明将创建两个对象。

关于java - 赋值和创建字符串实例有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2175064/

相关文章:

java - Android 应用程序图标和名称在应用程序中多次出现

Java 客户端证书和 keystore

java - Kubernetes:如何使用 K8 的 API 从代码中访问当前正在运行的 pod 的标签值?

python:如何覆盖str.join?

c - C 函数中的段错误

Java:空白索引问题

c# - 在不总是相同的字符串中间添加一个字符

c++ - 比较以 char 形式出现的字符串**

ios - CGBitmapContextCreateImage 内存泄漏

linux - 无法通过 Linux 内核模块 (Ubuntu) 写入内核内存