java数组静态初始化区别(内存方面)

2025-05-01 22:17:52
推荐回答(3个)
回答1:

我没太明白你说的静态数组初始化是什么意思。
正常静态数组变凉
static int[] a = {1,2,3,4,5};
静态存储的是这个a这个变量,这个变量再进程运行没有退出之前都存在,不回被垃圾收集齐回收。
1,2,3,4,5这些毫无疑问是存放在堆中的。这样如果a这个变量没有指向其他的,1,2,3,4,5都不会被收集。
普通的变量
int b[] = {1,2,3,4,5}
这个变量,离开了作用域,并且没有被其他类引用的话,下一次垃圾回收来临时被判断为链路不可达,被回收资源,就访问不到了。

回答2:

第一种 new string[]{} 是放在堆区的,而dogs是在栈区的,两者通过引用相互连接
第二种 直接在栈区的
new出来的东西都放在堆区

回答3:

String dogs[] = { "Tom","Sam","Mimi" }
不需要new创建数组对象,这时编译器会计算列表中初始的个数来确定数组元素的正确个数;
String dogs[] = new String[] {
"Tom","Sam","Mimi"
};