【问题标题】:I did not initialize a variable yet I still receive an output我没有初始化变量但我仍然收到输出
【发布时间】:2015-01-17 10:20:26
【问题描述】:

这是我的代码:

class Xyz{
   public static void main(String args[])
   {
      first fobj = new first(10);
      for(int i=0;i<5;i++){
         fobj.add();
         System.out.printf("%s",fobj);
      }
   }
}

class first{
   public int sum=0;
   public final int num;
   first(int x){
      num=x;
   }

   public void add(){
      sum+=num;
   }

   public String toString()
   {
      return String.format("sum = %d" ,sum);
   }
}


output:
sum=10
sum=20
sum=30
sum=40
sum=50

first 类中,我没有初始化名为“sum”的变量,但我仍然得到输出。有人可以向我解释吗? asgfafgalsdfkjsaflkasflaskfalskfajlskfaslkjflaskfaslkflasjkf.

【问题讨论】:

  • 这是什么? public int sum=0;
  • 你已经把它初始化为0了。
  • 对不起,这是我的错误,它的整数;
  • int 变量仍初始化为 0。查看this question

标签: java initialization


【解决方案1】:

类和实例数据成员自动默认为其类型的全位关闭值(0int 的情况下),即使您没有明确地这样做。由于sum 是一个实例数据成员,它隐式默认为0

这被§4.12.5 of the Java Language Specification覆盖:

每个类变量、实例变量或数组组件在创建时都会使用默认值进行初始化(第 15.9 节、第 15.10.2 节):

  • 对于byte类型,默认值为0,即(byte)0的值。
  • 对于short类型,默认值为0,即(short)0的值。
  • 对于int类型,默认值为0,即0
  • long类型默认为零,即0L
  • 对于float类型,默认值为正零,即0.0f
  • 对于double类型,默认值为正零,即0.0d
  • char类型的默认值为空字符,即'\u0000'
  • boolean 类型的默认值为false
  • 对于所有引用类型(第 4.3 节),默认值为 null

【讨论】:

    【解决方案2】:

    在 Java 中,所有成员变量在创建对象时都会自动初始化为其默认值,即使您自己不这样做也是如此。 int 的默认值为0

    【讨论】:

      【解决方案3】:

      实例成员自动初始化为默认值,JLS-4.12.5 Initial Values of Variables

      每个类变量、实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9§15.10):

      ...

      For type `int`, the default value is zero, that is, 0. 
      

      【讨论】:

        猜你喜欢
        • 2019-03-01
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 2020-12-05
        • 2013-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多