问题描述
当我尝试打印未初始化的静态字符数组时,它会给出运行时错误(空指针异常),而未初始化的静态int数组会给出空值。为什么?
When I try to print the uninitialized static char array it gives run time error (Null pointer exception) whereas the uninitialized static int array gives null value. Why?
public class abc {
static int arr[];
static char ch[];
public static void main(String[] args) {
System.out.println(ch); //it gives null pointer exception at run time
System.out.println(arr); //it gives output as "null".
}
}
推荐答案
System.out
是 PrintStream
的一个实例,这个类有一些重载 println
方法。在您的情况下:
System.out
is an instance of PrintStream
and this class has a few overloaded println
methods. In your case:
-
System.out.println(ch);
正在使用public void println(char x [])
-
System.out.println(arr);
正在使用public void println(Object x)
(没有public void println(int [] x)
方法所以int []
最接近的可用类型println
可以使用的是对象
)。
System.out.println(ch);
is usingpublic void println(char x[])
System.out.println(arr);
is usingpublic void println(Object x)
(there is nopublic void println(int[] x)
method so the closest available type forint[]
whichprintln
can use isObject
).
第二种方法是使用
String.valueOf(x);
获取我们要打印的对象的字符串表示以及<$ c $的代码c> valueOf 方法看起来像
to get a string representation of the object we want to print and the code of the valueOf
method looks like
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
所以它是空的安全(将返回字符串null
如果引用保持 null
)。
so it is null-safe (will return the string "null"
if the reference holds null
).
第一种方法是在某种程度上使用
The first method is at some level using
public void write(char cbuf[]) throws IOException {
write(cbuf, 0, cbuf.length);
// ^^^^^^^ this throws NPE
}
因为 cbuf
是 null
cbuf.length
将抛出NullPointerException因为 null
没有长度
(或任何其他)字段。
and because cbuf
is null
cbuf.length
will throw NullPointerException because null
doesn't have length
(or any other) field.
这篇关于char和int数组的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!