Java 8中用户定义对象的默认值
所以我有点困惑,如果我只是错过了一些非常明显的东西,但希望这是一个简单的问题 我创建了一个用户定义的对象,它有两个构造函数:默认的no-arg构造函数和一个接受整数作为参数的构造函数 然后,我在另一个类中创建了一个引用变量,而没有创建对象 像这样的Java 8中用户定义对象的默认值,java,type-inference,Java,Type Inference,所以我有点困惑,如果我只是错过了一些非常明显的东西,但希望这是一个简单的问题 我创建了一个用户定义的对象,它有两个构造函数:默认的no-arg构造函数和一个接受整数作为参数的构造函数 然后,我在另一个类中创建了一个引用变量,而没有创建对象 像这样的 public class A{ int num; public A{} public A(int num){this.num = num;} } public class B{ A a; } 这就是我的问题所在
public class A{
int num;
public A{}
public A(int num){this.num = num;}
}
public class B{
A a;
}
这就是我的问题所在,在B类中,根据我的理解,实例变量a应该得到一个默认值null,因为它是一个对象引用,但我得到的是一个默认值0 通过查看我的代码,我知道这种行为是由类A构造函数中int-param的param类型引起的
public A(int num){this.num = num;}
为什么会这样?为什么它不是空的
如果你说
B b = new B();
// b.a == null #TRUE
b.a = new A();
// b.a == null # FALSE
// b.a.num == 0 #TRUE
“根据我的理解,在类B中,实例变量a的默认值应该为null,因为它是一个对象引用,但我得到的默认值为0”-不,您没有。它是空的。值为0的是
num
。因为对象不能为0。除布尔值为false外,基本体默认初始化为0。对象引用被初始化为null。这就是Java为您所做的所有初始化。
public class A{
int num;
public A(){
}
public A(int num){this.num = num;}
}
public class B {
A a;
}
public class Main {
public static void main(String[] args) {
B b = new B();
System.out.println(b.a.num);//Will Throw Null pointer exception if you
try to access a,in any case it will not be 0
}
}