如果我将一个字符串声明为
String test=new String("testing");
和
String test1="testing1"
由于 String 是 JAVA 中的一个类,test1 如何在不使用 new 运算符的情况下成为字符串对象。此外,当使用新运算符时,内存会分配给 new String("testing") 所以在 test1 的情况下如何分配的内存?
另外,当字符串被实习时,如果两个字符串具有相同的值,字符串存储在字符串实习池中的引用是什么?
让我们首先考虑这个 String test=new String("testing");
- 它在堆中创建一个字符串对象。不在字符串池中检查该字符串是否存在于池中。
现在这个 String test1="testing1"
- 它在字符串池而不是堆中创建一个字符串对象。在创建之前检查这个字符串是否已经在池中。如果是,则返回它的引用,否则在池中创建一个新的字符串,它的引用是返回。基本上这是一个 String Literal,它被放入常量池中用于内存优化和可重用性。
intern(): 当您使用 new() 构造一个对象并在该对象上调用 intern() 时使用它,然后首先在 Stirng 池中完成检查是否该字符串已经存在or not,yes直接使用