代码之家  ›  专栏  ›  技术社区  ›  Javier Parra

如何检查变量是否已初始化

  •  18
  • Javier Parra  · 技术社区  · 14 年前

    问题是:我有一个 String[] s s 变成一个 int[] n .

    s[0] 包含 n 有效地保持 s.length-1 . 我正在尝试使用foreach循环来实现这一点:

    int[] n;
    for(String num: s){
        //if(n is not initialized){
            n = new int[(int) num];
            continue;
        }
        n[n.length] = (int) num;
    }
    

    现在,我意识到我可以用这样的东西:

    int[] n = new int[(int) s[0]];
    for(int i=1; i < s.length; i++){
        n[i-1] = (int) s[i];
    }
    

    9 回复  |  直到 14 年前
        1
  •  13
  •   erickson    14 年前

    你不能投 String int . Java是强类型的,没有像脚本语言那样的隐式类型转换。

    转换 字符串 到一个 内景 Integer.parseInt(String) .

    内景 类型,值为0。对于引用类型(的任何子类型 Object ),默认值为 null . 局部变量不会获得默认值,但是编译器会分析代码,以确保在读取变量之前指定了值。否则,代码将无法编译。

    我想你想要的是这样的:

    int[] n = new int[Integer.parseInt(s[0]);
    for (int idx = 0; idx < n; ++idx)
      n[idx] = Integer.parseInt(s[idx + 1]);
    
        2
  •  12
  •   Joachim Sauer    14 年前

    null 并检查该值 如果 您的变量不是基元类型 不是初始化后的有效值。

        3
  •  2
  •   Andrey    14 年前
    int[] n = null;
    for(String num: s){
        if(n == null){
            n = new int[(int) num];
            continue;
        }
        n[n.length] = (int) num;
    }
    
        4
  •  1
  •   Anthony Forloney    14 年前

    如果将变量或对象初始化为 null 在使用之前,

    String myVar1 = null;
    Person bobby = null;
    

    if (myVar != null) {
      // myVar has a value.
    }
    
        5
  •  1
  •   Oliver Michels    14 年前
        6
  •  1
  •   fastcodejava    14 年前

    你唯一能做的就是对照 null . 如果你的代码在一个方法中,如果你不初始化它就不会编译。因此,如果它编译并运行,您就知道它至少被初始化为 无效的 然后再做 检查。

        7
  •  1
  •   Jay    14 年前

    正如其他人所指出的,最接近“正确方法”的方法是将数组初始化为null。

    “n[n.length]”将引发“索引越界”异常。数组的元素范围从0到length-1。在任何情况下,我认为您在第一种情况下想说的是“n[0]”,在第二种情况下想说的是“n[I]”。

        8
  •  0
  •   Adam_G    12 年前

    int 已初始化。在我的程序中,它可能被初始化为 0 if (int i = 0) 不会有什么好处。

    boolean

        9
  •  -1
  •   Thomas Lötzer    14 年前

    你可以查一下 null :

    int[] n;
    for(String num: s){
        if(n == null) {
            n = new int[(int) num];
        }
        n[n.length] = (int) num;
    }
    

    请注意,只有当n是类成员时,才会发生这种情况。如果它是一个局部变量,编译器将不允许您在没有初始化的情况下使用它。