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

NIN*_*OOP 2 java reference outputstream

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

System.out.print(null);    
response.getWriter().print(null);
Run Code Online (Sandbox Code Playgroud)

但是下面的工作:

String s = null;
System.out.print(s);
response.getWriter().print(s);
Run Code Online (Sandbox Code Playgroud)

传递a null与传递引用之间的区别是null什么?

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

Lui*_*oza 9

这是因为你可以传递一个Object或一个String.由于null可以兼容两者,编译器不知道使用哪种方法,导致编译错误.

方法定义:

相反,如果您提供一个Object或一个String变量(即使它有null值),编译器将知道使用哪个方法.

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

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

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

  • 这被称为"超载" (2认同)