可能是个愚蠢的问题,
需要了解以下
1。)//声明引用,null Object
String message = null;
在上述情况下,何时会引用'消息'是否有资格获得garbage collection
,如果有string reference to null
有资格获得GC
2。)//声明引用,空String对象
String message = "";
3。)//引用声明,Object值为Hello
String message = "Hello";
从上面看,在所有三种情况下都是1 references is created
,
Object creation
怎么样???如何在String Pool
和heap
答案 0 :(得分:2)
首先,引用不是GCed对象。但是对于Strings而言,它有点棘手,因为字符串的对象和字符串文字是不同的。
String s = "Hello";
String s1 = new String("Hello");
这些是不同的。第一个创建一个字符串文字,它进入池,并且引用s附加到它。第二个创建一个String类型的Object,它指向String文字" Hello"在池中,引用s1附加到String对象而不是文本。
通常,当一个对象(想象为通用对象让我们说Employee)不在线程或执行流的实时路径中并且没有被任何其他对象引用时(引用并不意味着这里的引用而是对象之间的关联)像员工和地址一样,它有资格获得GC。
Null是Java中的一种特殊类型,不受GC一般GC规则的约束。任何未指向对象位置的引用实际上都指向null。
答案 1 :(得分:1)
在上述情况下,何时会引用'消息'有资格进行垃圾收集,如果将字符串引用为null,则读取某处符合GC
的条件
它不是参考。它是一个局部变量,可以(但不包含)引用。如果将此变量分配给非常量String,则一旦不再引用该变量,该引用最终将有资格进行垃圾回收。
尽管如此,变量指向null,并且一旦声明范围(通常是方法)被遗留,它就会消失。这里没有垃圾收集。垃圾收集是关于对象而不是变量。
答案 2 :(得分:0)
1。)没有创建对象。它只是您定义的参考。
2。)在字符串池中创建的字符串对象(指空字符串"")。
3。)在字符串池中创建的字符串对象(参考" Hello")。