我对于为什么可以不用调用new String()
来创建字符串感到好奇,因为API将其定义为class
java.lang.String
的Object
。
那么我们如何使用String s="hi"
而不是String s=new String("hi")
呢?
这个帖子阐明了==
运算符的使用和缺少new
,并指出这是由于JVM
将String
字面量放入常量池中或从中提取,因此Strings
是不可变的。
当看到这样的陈述时:
String s="hi"
第一次会发生什么?
JVM
是否像这样替换它:String s=new String("hi")
,其中创建了一个对象并将"hi"
添加到字符串字面值池中,因此随后的调用(例如String s1="hi"
)都从池中获取?底层机制是这样操作的吗?如果是,则
此外,我们是否可以访问字符串池以检查其中存在多少个
String
文字,占用了多少空间等信息?
String s=new String("Test");
String s1="Test";
与...相同
String s="Test";
String s1="Test";
在内存利用和效率方面有什么考虑吗?
s = "hi"
更改为s = new String("hi")
是什么意思?我不明白这样做除了添加一个新层之外解决了什么问题,现在你需要s = new String(new String("hi"))
,最终你需要一个无限期的术语new String(new String(...
。如果你指的是rhs中的"hi"
不是字符串,那么你应该使用不同的语法。 - Bakuriu.class
文件的是编译器。 ;) - TC1