当我们使用new操作符时,对象是在字符串常量池中创建的。?
String s = new String(“hello”);
这里将创建两个对象,一个在堆内存中,另一个在字符串池中
那么,intern()
方法有什么用呢?执行上述语句后,字符串"hello"
将在堆和字符串池中可用
你可以在下面搜索框中键入要查询的问题!
String s = new String(“hello”);
这里将创建两个对象,一个在堆内存中,另一个在字符串池中
那么,intern()
方法有什么用呢?执行上述语句后,字符串"hello"
将在堆和字符串池中可用
# 1 楼答案
intern
strings提供了将字符串与==
(更快)进行比较的简单性,而不是非intern不能使用equals
运算符实现相等的==
函数new
将把内存分配给堆中的s
,而不是由VM维护的内部唯一字符串集,也称为SCP。在加载调用时在类中找到的所有字符串都会被自动插入(带有强引用),从而有效地使用内存在
s
字符串文本上调用intern()
将在SCP中添加s
的弱引用(短时间),并返回该引用,因此GC
肯定会释放s
消耗的堆内存当不再使用弱引用时,它也将被删除,从而再次导致高效的内存管理
字符串将临时添加到SCP,或者使用
direct double quotes
(String s=“sytax”;)语法或调用intern()
尽量避免使用字符串,否则永远不要