Java 8中用户定义对象的默认值

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; } 这就是我的问题所在

所以我有点困惑,如果我只是错过了一些非常明显的东西,但希望这是一个简单的问题

我创建了一个用户定义的对象,它有两个构造函数:默认的no-arg构造函数和一个接受整数作为参数的构造函数

然后,我在另一个类中创建了一个引用变量,而没有创建对象 像这样的

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
   }
}