Ada*_*dam 6 java memory jvm initialization
在java中,您不能在其声明中声明数组的大小
int[5] scores; //bad
Run Code Online (Sandbox Code Playgroud)
我被告知这是因为在初始化对象之前,JVM不会在内存中分配空间.如果您有一个实例数组变量(使用默认值null自动初始化),该变量是否指向堆中指示为null的位置?
空引用实际上是零值。操作系统会阻止任何程序访问内存中的零地址,因此 JVM 会主动检查并确保引用值在允许您访问之前不为零。这让 JVM 给你一个很好的 NullPointerException 而不是“程序执行了非法操作”崩溃。
所以你可以说变量“指向”一个无效的堆位置。或者你可以说变量不“指向”任何东西。在这一点上,这只是一个语义问题。
不,因为在 JVM 中不需要这样做。如果您使用母语(例如 C 和 C++),则 NULL 是一个零值的指针,它指向内存基地址。显然这不是一个有效的地址,但无论如何你“可以”取消引用它 - 特别是在没有受保护内存的系统中,例如旧的 MS-DOS 或用于嵌入式处理器的小型内存。并不是说它是一个有效的地址 - 通常该位置包含中断向量,并且您不应该触摸它们。当然,在任何现代操作系统中都会引发保护错误。
但在 JVM 中,对对象的引用更像是句柄(即表中的索引),而 null 是“不可能”值(表域之外的索引),因此无法取消引用并且不占用此类表中的空间。
| 归档时间: |
|
| 查看次数: |
2253 次 |
| 最近记录: |