繁体   English   中英

Java - 将null作为参数传递给print()

[英]Java - passing null as an argument to print()

我想知道为什么下面的代码不起作用:

System.out.print(null);    
response.getWriter().print(null);

但是下面的工作:

String s = null;
System.out.print(s);
response.getWriter().print(s);

传递null与传递引用为null的区别是什么?

编辑:前面提到的工作不表示编译错误。

这是因为您可以传递ObjectString 由于null可以同时适用于两者,因此编译器不知道使用哪种方法,从而导致编译错误。

方法定义:

相反,如果您提供ObjectString变量(即使它具有null值),编译器将知道要使用哪个方法。

编辑: 在这个答案中更好地解释了这一点 至于指向Java规范的内部链接,你可以在这里阅读,这种情况适合这里:

非正式的直觉是,如果第一种方法处理的任何调用可以传递给另一种没有编译时类型错误的调用,则一种方法比另一种方法更具体。

可能没有方法是最具体的,因为有两种或更多种方法是最具体的。

这是因为System.out.println()需要具有类型的东西。 null没有类型,因此无法自行输出。 这显示为:

不起作用:

 System.out.println(null);

作品:

 System.out.println((String)null);
 System.out.println((char[])null);
 System.out.println((Object)null);

它是编译器类型 - 检查方法调用的参数。

谢谢大家的答案 。 根据您的意见,我自己编写了答案。 似乎调用System.out.print(null)对编译器不明确,因为print(null)在这里将找到两个最佳的特定匹配,即print(String)print(char[]) 因此编译器无法确定在此处调用哪种方法。
小例子是:

private void methodCall(String str) {
}

private void methodCall(char[] ch){
}

现在这段代码变得methodCall(null)methodCall(null)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM