小编tro*_*ale的帖子

Java的String.intern()的目的是什么?

我知道有两种方法可以在Java中创建String:

String a = "aaa";
String b = new String("bbb");
Run Code Online (Sandbox Code Playgroud)

第一种方式,Java肯定会在字符串池中创建一个String对象并a引用它.(假设"aaa"之前不在游泳池里.)

使用第二种方法,将在堆中创建一个对象,但是jvm还会在字符串池中创建一个对象吗?

在这篇关于Java字符串池的问题中,@ Jesper说:

如果你这样做:

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

然后在池中将有一个String对象,一个代表文字"abc",>的对象,并且将有一个单独的String对象,而不是在池中,它包含池对象的>内容的副本.

如果这是真的,那么每次使用new String("bbb");,在池中创建一个对象"bbb",这意味着通过上面的任何一种方式,java将始终在池中创建一个字符串对象.然后intern()用于什么?在文档http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern()中,它说:

调用实习方法时,如果池已经包含等于此字符串对象的字符串(由equals(Object)方法确定),则返回池中的字符串.否则,将此String对象添加到池中,并返回对此String对象的引用.

这意味着有些情况下池中没有字符串,这可能吗?哪一个是真的?

java string

7
推荐指数
2
解决办法
2210
查看次数

标签 统计

java ×1

string ×1