我有以下代码:-
public class StaticImplementer {
private static String str= "ABC";
public static void main(String args[]) {
str = str + "XYZ";
}
}
问题:-
这里String str是static的,那么这个对象会存放在内存的什么地方呢?
由于 String 是不可变的,“XYZ”的对象将存储在哪里?
最终对象将存储在哪里?
垃圾收集将如何进行?
1)这里String str是静态的,那么这个对象将存储在哪里
记忆?
这些文字将存储在字符串中池内存,无论是否variable
被声明为static
or not.
更多信息请点击这里:Java的字符串常量池位于哪里,堆还是栈? https://stackoverflow.com/questions/4918399/what-type-of-memory-heap-or-stack-string-constant-pool-in-java-gets-stored
2)由于String是不可变的,“XYZ”的对象将存储在哪里?
与第一个答案类似:文字将存储在池内存中。
不变性只是允许共享池内存的概念。
3)最终对象将存储在哪里?
根据Java规范 http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.5,文字的串联最终也会得到一个文字(因为在编译时已知),存储在池内存中。
摘抄:
"This is a " + // actually a string-valued constant expression,
"two-line string" // formed from two string literals
4)垃圾收集将如何进行?
作为池内存的本质,它们默认不会被垃圾回收。
事实上,如果立即收集垃圾,池的“共享”概念就会失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)