char[] ch=null;ch的输出

shiliufu 2007-01-28 12:34:43
public static void main(String[] args) {

char[] ch=null;
System.out.println(ch);
System.out .println("ch: "+ch);
}
为什么System.out .println("ch: "+ch);会输出ch: null
而System.out.println(ch);会报出空指针异常,

其它类型的数组都不会发生这种情况,只有char[]会这样。
...全文
536 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengmingjie 2007-01-30
  • 打赏
  • 举报
回复
通俗的理解就是因为加了“ch”,system.out.println认为输出的是string啊
believefym 2007-01-30
  • 打赏
  • 举报
回复
最好直接分析源代码,println(char[])最终调用下面的代码,有个for循环,它把buf看作不为null来处理

而""+buf是自动调用Object.toString方法,如果是null的,就返回"null"
所以一个有异常,一个没异常

private void write(char buf[]) {
try {
synchronized (this) {
ensureOpen();
textOut.write(buf);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush) {
for (int i = 0; i < buf.length; i++)
if (buf[i] == '\n')
out.flush();
}
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}
iamsangster 2007-01-30
  • 打赏
  • 举报
回复
java .io.Writer

public void write(char cbuf[]) throws IOException {
write(cbuf, 0, cbuf.length);
}
cbuf.length 能不异常吗?
china8848 2007-01-28
  • 打赏
  • 举报
回复
我认为:char[]这个数组指向null,就是个空指针,所以System.out.println(ch);很正常,而"ch: "+ch 转化为了String 就向 ""+ch ,ch 转化为String后就是null,所以不异常
grapepaul 2007-01-28
  • 打赏
  • 举报
回复
学习了
nyj_vbnet 2007-01-28
  • 打赏
  • 举报
回复
好奇怪的问题,顶

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧