Kev*_*hou 20 java reference primitive-types
我正在研究我的Java以准备考试,我遇到了一些未初始化的int/Integer值的问题.
class A
{
int x;
Integer y;
static int z;
static Integer z2;
public A(){}
}
Run Code Online (Sandbox Code Playgroud)
假设我初始化了A类的对象.A a = new A();
我在编译器中尝试了这个并得到了结果
a.x == 0; true
a.x == null; Static Error: Bad type in comparison expression
a.y == 0; java.lang.NullPointerException
a.y == null; true
a.z == 0; true
a.z == null; Static Error: Bad type in comparison expression
a.z2 == 0; NullPointerException
a.z2 == null; true
Run Code Online (Sandbox Code Playgroud)
此外,我在交互窗格中尝试了一些更未初始化的int/Interger比较,看看如果我的x,y不是上面的类实例变量,我是否会得到不同的结果.
int x;
Integer y;
x == 0; true
x == null; Static Error: Bad type in comparison expression
y == 0; java.lang.NullPointerException
y == null; true
Run Code Online (Sandbox Code Playgroud)
但是,我的教授在一次演讲中声称价值观应如下:
x == 0; Uninitialized
x == null; Undefined
y == 0; java.lang.NullPointerException
y == null; Uninitialized
Run Code Online (Sandbox Code Playgroud)
现在我不想怀疑写考试的人,但是哪个x == 0和y == null真值是正确的?为什么会非常感谢您的解释,谢谢.
Sta*_*lin 18
简单类型的Java值(如int/long)不能为null,因此它们初始化为0.
Mat*_*hen 18
a.x == 0
- 是的,因为ax的默认值为0.a.x == null
- 如上所述,这是一个编译时错误.这遵循§15.21.3:"如果无法通过强制转换(§5.5)将任一操作数的类型转换为另一种操作数的类型,则会发生编译时错误." null类型不可转换为数字.a.y == 0
- 这会尝试取消设置a.y,
为null,因此它会抛出NullPointerException.与上面的(具有文字null)不同,编译器不会尝试在编译时计算出a.y
null.a.y == null
- 再次,true因为a.y
初始化为nulla.z == 0
- 与a.x
(静态除外)相同a.z == null
- 与a.x
(静态除外)相同a.z2 == 0
- 与a.y
(静态除外)相同a.z2 == null
- 与a.y
(静态除外)相同交互窗格的问题在于IDE如何实现它.如果x和y是本地(未初始化)变量,则所有四个最后比较都将无法编译.
归档时间: |
|
查看次数: |
36660 次 |
最近记录: |