在面向对象的语言中,通过使用new 关键字创建新对象(因为 java 中的内存分配是动态完成的)。
尽管 String 是一个类,但如何在没有 new 关键字的情况下创建其对象?
即使它使用字符串池,我也无法清楚地理解它: “可以创建一个用户定义的类,我们可以在其中像 String 一样直接初始化变量”
最佳答案
使您能够使用字符串文字创建 String
对象的机制内置于编译器和 JVM 中。它不适用于用户定义类型的对象。
当你第一次写作时
String s = "sometext";
编译器发出两件事:
- A constant pool包含
"sometext"
的条目,以及 - 设置
s
以引用常量表中条目的指令。
如果你写
String t = "sometext";
在同一个类中,编译器将为 "sometext"
重用现有常量,而不是创建一个新常量。
在运行时,JVM 为常量表中的每个条目创建一个新的 String
对象,并让您的程序访问它们。本质上,JVM 代表您的程序调用 new
,并将它交给一个随时可用的对象。
当您使用自动装箱创建原始包装器的实例时,类似的系统正在发挥作用。然而,共同点是它需要编译器的支持,并且不适用于用户定义的类型。
关于java - String s ="sometext"是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003169/