1
7
请看这里: Java室内空气品质: Is null an Object? |
2
3
|
3
3
这个问题突出了 scope 和 definite assignment . 如果在调试器中单步执行以下代码,则在每行中断时可以看到几个功能:
列表:
附录:
定赋值
,局部变量的值不可访问;任何访问该值的尝试都将在编译时被拒绝。一旦指定了一个定值,甚至
附录:a的内容 frame's local variables 未指定初始化之前。这个 bytecode verifier deviant bytecode 是可能的。 |
4
0
尚未赋值的局部变量可能也指向null。我不是JVM专家,但这似乎是合乎逻辑的选择。 所以编译器会检查您是否为变量赋值。除此之外没有区别。在运行时,尚未初始化的局部变量被分配为null。 |
5
0
Null不是对象。事实上,它与对象相反,这就是为什么不能对指向null的引用进行方法调用。如果你真的必须知道null是什么,你可以把它看作是一个类似于零的东西。事实上,指向null的引用不再占用内存,即零。它没有值,所以它是一个引用,不引用任何对象。 在Java中,必须先初始化变量,然后才能使用它。由于历史的原因,Java不希望您假定值,因此编译器会强制您为它赋值。造成这种情况的部分原因是C导致的错误和安全问题,因为它没有在值被使用之前初始化或强制您这样做。Java确实为原语和实例变量初始化了一些值:0、0.0、false和null等,但是对于局部变量,必须给它一个值。这是为了保护你自己。:-) |