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

Jav*_*rra 18 java

首先,我对Java很新,很抱歉,如果这个问题非常简单.

问题是:我有一个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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

但是我相信我将来会遇到"如果n未初始化则初始化它"的问题.

eri*_*son 13

你不能投了String一个int.Java是强类型的,并且没有像脚本语言中那样的隐式类型转换.

要将a转换String为an int,请使用显式转换,例如Integer.parseInt(String).

使用默认值初始化所有成员变量和数组元素.对于int类型,值为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]);
Run Code Online (Sandbox Code Playgroud)

  • @Javier`new Integer(String)`在大多数情况下不是一个很好用的API.如果你想要一个`Integer`对象,请使用`Integer.valueOf(String)`.这将最小化创建的不同对象的数量.在这种情况下,如果你想要一个原始的`int`,使用`parseInt`方法,这样可以避免完全创建`Integer`对象. (5认同)
  • @Javier:再说一遍:那不是"铸造",而是"转换". (2认同)

Joa*_*uer 12

您无法检查代码中是否初始化了变量,因为从定义中读取可能尚未初始化的变量导致编译时错误.

如果变量不是基本类型并且在初始化后不是有效值,则可以将变量初始化为null并检查该值. null

在具体示例中,您展示的第二个代码肯定会更清晰.