String s ="sometext"如何工作?

gaj*_*y p 4 java oop string

在面向对象的语言中,新对象的创建是通过使用new关键字(因为java中的内存分配是动态完成的).

即使String是一个类,如何在没有关键字的情况下创建其对象?

即使它使用字符串池我也无法清楚地理解它: "可以创建一个用户定义的类,我们可以像String一样直接初始化变量"

das*_*ght 5

String使用字符串文字创建对象的机制内置于编译器和JVM中.它不可用于用户定义类型的对象.

当你第一次写

String s = "sometext";
Run Code Online (Sandbox Code Playgroud)

编译器发出两件事:

  • 一个常量池项与"sometext"在里面,
  • 设置s为引用常量表中的条目的指令.

如果你写

String t = "sometext";
Run Code Online (Sandbox Code Playgroud)

在同一个类中,编译器将重用现有常量"sometext",而不是创建新常量.

在运行时,JVM String为常量表中的每个条目创建一个新对象,并为您的程序提供访问它们的权限.从本质上讲,JVM new代表您的程序调用,并将其交给即用型对象.

当您使用自动装箱创建原始包装器的实例时,类似的系统正在发挥作用.但是,常见的是它需要编译器的支持,并且不适用于用户定义的类型.