字符串声明 - >空,空字符串,一些值 - 字符串声明

时间:2014-12-11 07:56:30

标签: java string

可能是个愚蠢的问题,

需要了解以下

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 Poolheap

中维护这些内容

3 个答案:

答案 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")。