为什么在以下程序中打印char []不会打印任何输出,而当char []被其他数组类型int []或float []或String []等替换时,同一程序将打印输出< / p>
public class Test5 {
public static void main(String[] args) {
char arr[] = new char[5];
System.out.println(arr);
System.out.println(arr[0]);
}
}
而以下内容使用int []打印输出
public class Test5 {
public static void main(String[] args) {
int arr[] = new int[5];
System.out.println(arr);
System.out.println(arr[0]);
}
}
OutPut:[I @ 4cc77c2e
0
答案 0 :(得分:1)
您的第一个程序确实产生输出。输出恰好采用不可见控制字符的形式。
当创建一个char数组时,它会填充"NUL" characters(不要与Java空引用值混淆),它们的Unicode代码点为0。该字符是不可见的控制字符,并且是终端不显示它。如果您打印到其他输出设备(例如文件),然后打开该文件,则会看到它。
第二个程序产生不同的输出,因为println method has a special overload for char arrays but not for other arrays。这意味着第二个程序将打印int数组的字符串表示形式,其形式为[I@
,后跟十六进制数字。
如果希望第一个程序提供类似的输出,则需要使用不同版本的println方法。这些都可以工作:
System.out.println((Object) arr);
System.out.println(arr.toString())