gpt4 book ai didi

java - 字符串 s=新字符串 ("Rohit");该语句是仅在堆中创建一个对象还是也在字符串池中创建一个条目?

转载 作者:行者123 更新时间:2023-12-01 18:29:23 27 4
gpt4 key购买 nike

我参加了面试,有人问我这个问题。

String s=new String("Rohit"); 

该语句仅在堆中创建一个对象还是也在字符串池中创建一个条目?

我回答说它不会进入池中。我认为与.intern()它将进入字符串池。面试官的想法正好相反。

如果我错了,请面试官指导一下吗?

提前致谢。

编辑:

String s1=new String("Rohit");

String s2="Rohit";

String s3=new String("Rohit").intern();

System.out.println(" "+(s2==s3)+" "+(s1==s2)+" "+(s1==s3)+" "+(s2==s3));

结果为:true false false true

这让我认为如果不使用 new 的 intern() ,池中就没有该对象的条目

最佳答案

你所说的他所说的有几点错误:

首先,执行new String总是返回一个新字符串,并且永远不会返回一个被保留的字符串。

其次,虽然字符串文字“Rohit”的存在可能会导致该值的字符串被“interned”(错误地称为放置在“字符串”中)池”或“字符串常量池”),这将在类加载时完成(如果已完成),而不是在执行语句时完成。

第三,由于在内部字符串表中只能有一个具有给定模式的字符串副本,因此即使加载该类也不能保证添加一个新条目,因为一个条目可能已经存在了。

当然,正如通常的情况一样,你们一方或双方可能存在一些误解,或者问题(或您的答案)可能措辞不当/不清楚。

关于java - 字符串 s=新字符串 ("Rohit");该语句是仅在堆中创建一个对象还是也在字符串池中创建一个条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24971120/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com