【问题标题】:Default values for user defined objects in Java 8Java 8 中用户定义对象的默认值
【发布时间】:2018-05-24 20:25:46
【问题描述】:

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

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

然后我在另一个类中创建了一个引用 var 而没有创建对象 所以像这样的

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 参数的参数类型引起的

public A(int num){this.num = num;}

为什么会这样?为什么不为空?

谢谢

【问题讨论】:

  • "在 B 类中,根据我的理解,实例变量 a 应该得到一个默认值 null,因为它是一个对象引用,但我得到一个默认值 0" - 不,你不是.它是空的。 num 的值为 0。
  • 因为对象不能为0。
  • Primitives 默认初始化为 0,除了 boolean 为 false。对象引用被初始化为 null。这就是 Java 为您所做的所有初始化工作。

标签: java type-inference


【解决方案1】:

如果你说

B b = new B();
// b.a == null #TRUE
b.a = new A();
// b.a == null # FALSE
// b.a.num == 0 #TRUE

【讨论】:

    【解决方案2】:
    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
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-08
      • 2010-12-27
      • 1970-01-01
      • 2021-05-22
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      相关资源
      最近更新 更多