【发布时间】:2019-05-10 08:19:25
【问题描述】:
public class Test
{
public static void main(String[] args)
{
String s = new String("test");// ***
String s1 = s.toUpperCase();
String s2 = s.toLowerCase();
String s3 = s1.toLowerCase();
System.out.println(s==s1);//first case
System.out.println(s==s2);//second case
System.out.println(s==s3);//third case
}
}
1) 为什么第三种情况返回 false(已注释)。 s3 和 s 都指向 test 是吗?但似乎 JVM 在堆内存中为 s3 创建了另一个名为 test 的对象。但对于第二种情况(评论)是不一样的。它使用之前创建为 s 的对象(在代码中注释为 ***)。这是为什么?
2) s1 对象 TEST 会发生什么,因为 s3 是从 s1 创建的。 s1 会被销毁还是在堆中?
【问题讨论】:
-
对于您问题的第 2 部分,s1 一直存在,直到它不再被引用。在您上面的示例中,它仍然被引用。如果您将 s1 设置为 null,它将有资格进行垃圾收集。
-
谢谢杰森。请问第1题的答案可以吗
-
看第一条评论的链接。
-
不是我问题的答案。我问的是堆内存中创建的对象
标签: java object heap-memory equals-operator