java - 正在创建多少个对象?

标签 java string object

有一个关于 Java 中 Stringz 实例池的简单问题

如果我遇到这样的情况: 场景一:

String s1 = "aaa";  
String s2 = new String("aaa");  

然后翻转 场景2:

String s1 = new String("aaa");  
String s2 = "aaa";  

在每种情况下,在字符串池和堆中创建了多少个对象? 我假设两者都会创建相同数量的对象(2 个对象 - 一个用于字符串池中每个场景中的两行的单个“aaa”,一个用于新运算符)。 我在 iview 中被告知这是不正确的 - 我很好奇我的理解有什么问题?

最佳答案

正如您在采访中所说,无论哪种情况,答案都是堆中 1 个实例,字符串池中 1 个实例。

字符串可以驻留在两个空间:堆和存储临时字符串的永久代。

String 构造函数在堆中创建一个 String。字符串文字是在永久代的字符串池中创建的。可以使用 String.intern() 方法将堆中的字符串移动到字符串池中。它会驻留字符串(即,确定对池中相等字符串的引用,或者在其中创建一个相等字符串(如果还没有))并返回对驻留字符串的引用。

编辑:要检查我的回答,请添加 System.out.println(s1 == s2);作为每个示例的第三行。在这两种情况下都会打印 false,证明两个对象具有不同的内存地址。

关于java - 正在创建多少个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10045147/

相关文章:

c++ - 对象指针 vector ,一般帮助和混淆

java - Apache Spark 中 RowMatrix 和 Matrix 的区别?

java - IOException java.net.ConnectException : failed to connect to/127. 0.0.1(端口 5000):连接失败:ECONNREFUSED(连接被拒绝)

java - 正则表达式:删除 Java 中的第二对括号

c++ - 根据字符串表示设置枚举值

python - 这是一个错误吗?在此示例 (Python) 中,变量是对同一字符串的相同引用

java - 设置接口(interface)问题和对象

java - CSS、JS、图片压缩技术,避免服务器多次请求

java - 如何在 Java 中创建 parent-last/child-first ClassLoader,或如何覆盖已在父 CL 中加载的旧 Xerces 版本?

javascript - 将自定义事件绑定(bind)到 JavaScript 对象?