在面向对象的语言中,新对象的创建是通过使用new关键字(因为java中的内存分配是动态完成的).
即使String是一个类,如何在没有新关键字的情况下创建其对象?
即使它使用字符串池我也无法清楚地理解它: "可以创建一个用户定义的类,我们可以像String一样直接初始化变量"
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代表您的程序调用,并将其交给即用型对象.
当您使用自动装箱创建原始包装器的实例时,类似的系统正在发挥作用.但是,常见的是它需要编译器的支持,并且不适用于用户定义的类型.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |