tsk*_*zzy 19 c java memory arrays static
所以在像C这样的语言中,内存分为5个不同的部分:OS内核,文本段,静态内存,动态内存和堆栈.像这样的东西:
如果我们在C中声明了一个静态数组,那么你必须事先指定它的大小,然后才能永久修复它.该程序将为阵列分配足够的内存,并按预期将其粘贴在静态数据段中.
但是我注意到在Java中,你可以这样做:
public class Test {
static int[] a = new int[1];
public static void main( String[] args ) {
a = new int[2];
}
}
Run Code Online (Sandbox Code Playgroud)
一切都会像你期望的那样奏效.我的问题是,为什么这在Java中有效?
编辑:所以共识是int[]
Java中的行为int*
与C中的行为更相似.所以作为后续问题,有没有办法在Java中在静态内存中分配数组(如果没有,为什么不呢)?这不会更快地访问这样的阵列吗?EDIT2:^现在这是一个新问题:静态类变量存储在内存中的哪个位置?
Jon*_*eet 17
值a
只是对象的引用.数组创建表达式(new int[2]
)创建一个大小合适的新对象,并为其指定引用a
.
请注意,static
在Java中与static
C 语言是完全分开的.在Java中,它只是表示"与类型相关而不是与类型的任何特定实例相关".
Ami*_*far 11
在java中,只要您使用该单词new
,就会在堆上分配该对象的内存并返回引用.阵列也是如此.这int[] a
只是参考new int[1]
.执行此操作时new int[2]
,将分配一个新数组并指向a.旧数组将在需要时进行垃圾回收.
归档时间: |
|
查看次数: |
3238 次 |
最近记录: |