如何访问String池的对象

时间:2013-10-24 14:42:09

标签: java string

我们能否访问String池中没有任何引用的对象。 这是代码:

String str ="abc";
str.toUpperCase();
System.out.println(str); // System.out.println(str.toUpperCase());

Output : abc

我在toUpperCase()执行str操作。在String池中,将为此str.toUpperCase();创建一个对象。我们能够访问此对象吗?如果是的话怎么样?

2 个答案:

答案 0 :(得分:2)

这是使用java文档的地方....请参阅http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#toUpperCase()

str.toUpperCase()返回一个转换为大写的字符串,你必须将它分配给另一个字符串变量或进行自我赋值,以便以后可以访问它。

答案 1 :(得分:2)

String str ="abc";       // 1
str.toUpperCase();       // 2
System.out.println(str); // 3

在上面的代码中

第一行将创建值为“abc”的新String对象,并将其指定给引用变量str

第二行将创建String的新对象,因为String类是不可变的,因此原始对象str不会更改。但是在这里我们没有分配在第2行中创建的新对象,因此它将在堆区域的某处丢失。

这就是为什么第3行的打印值是“abc”。

如果要使用str.toUpperCase()创建的新对象,则必须将其分配给新的引用变量。 要么 替代选项是像这样更新原始String对象

str = str.toUpperCase();

但在上面的操作中,包含值“abc”的原始对象str将在堆区域中丢失!!!!!

您可以找到有关working with String by example here的详细信息。