Java 将null分配给字符串对象时会发生什么情况?

Java 将null分配给字符串对象时会发生什么情况?,java,string,garbage-collection,Java,String,Garbage Collection,我试图理解当一个字符串被赋值为null时它会发生什么。 因此,我有一个String str=newstring(“abc”)它使用内存中的一些空间。 当str被分配null时,即str=null,用于创建“abc”的内存会发生什么变化。它还使用内存空间吗?Java是垃圾收集的。为字符串分配的内存将在垃圾收集器确定的功能时间点释放。有关详细信息,请参阅 更新:正如评论员指出的那样,可能会阻止字符串被垃圾回收。细节取决于很多事情,比如引用的范围、JVM和Java版本。将null赋值给变量,而不是对象

我试图理解当一个字符串被赋值为null时它会发生什么。 因此,我有一个
String str=newstring(“abc”)它使用内存中的一些空间。

str
被分配
null
时,即
str=null
,用于创建
“abc”
的内存会发生什么变化。它还使用内存空间吗?

Java是垃圾收集的。为字符串分配的内存将在垃圾收集器确定的功能时间点释放。有关详细信息,请参阅


更新:正如评论员指出的那样,可能会阻止字符串被垃圾回收。细节取决于很多事情,比如引用的范围、JVM和Java版本。

将null赋值给变量,而不是对象。对象在被垃圾收集之前会一直保留在内存中。字符串是不可变的,因此是的,它会浪费空间,直到GC启动。如果您使用了类似
“…”
的字符串文本或将字符串插入内存,它仍会保留在Java的内部字符串缓存中。当您使用类似
新字符串(“abc”)
的过时构造函数时,您已经有两个字符串对象,一个是通过
“abc”
创建的,另一个是通过
新字符串(…)
创建的副本。字符串
“abc”
从未被变量引用过,但仍然可能比使用
new
创建的字符串寿命更长。请注意,Java有一个字符串缓存。如果该字符串是使用文字或插入字符创建的,它将保留在缓存中。只是一个小提示。@Zabuzard…直到GC将其清除。