我在多个方面非常困惑.有人能否对此有所了解.这是一个示例代码.
public static void main(String[] args) {
String str = null;
abc(str);
}
static void abc(String... str){
System.out.println(str.length);
}
Run Code Online (Sandbox Code Playgroud)
输出:1
jbx*_*jbx 10
让我们分解吧.我重命名了参数名称以使其更清晰.
static void abc(String... arrayOfStrings){
System.out.println(arrayOfStrings.length);
}
Run Code Online (Sandbox Code Playgroud)
这String ...是说,不是传递一个数组,你可以一个接一个地传递项目作为参数,在它们下面它们将被合并为一个数组.你仍然可以传递一个显式的类型对象String[](在这种情况下它不会为你创建数组),但是传递只是null假设它的类型String不是String[].
你正在做abc(null)(因为你传递的参数是null).
所以arrayOfStrings会有一个项目,恰好是一个 null参考.
所以,arrayOfStrings.length回报1.
如果你这样做abc(null, null),你会得到2.
如果你这样做,abc((String[]) null)你会得到一个,NullPointerException因为你会试图得到length一个null对象引用.如果您希望传递空值,请确保在访问数组之前abc()检查null作为参数传递.
作为一般的最佳做法null,尽可能避免传递,最好传递一个空数组.传球null只是一个毒丸,等待一些方法忘记检查null和投掷NullPointerException.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |