我们能否访问String池中没有任何引用的对象。 这是代码:
String str ="abc";
str.toUpperCase();
System.out.println(str); // System.out.println(str.toUpperCase());
Output : abc
我在toUpperCase()
执行str
操作。在String池中,将为此str.toUpperCase();
创建一个对象。我们能够访问此对象吗?如果是的话怎么样?
答案 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的详细信息。