我想问的是为什么System.out.println(null);会出现编译错误呢?

解决方案 »

  1.   

    System.out.println(null);
    这里得null可以当做任何对象
    对编译器来说又歧义
      

  2.   

    出现编译我想是有原因的。
    为什么不跟System.out.println()的函数原型对照一下呢。它的参数里可以是null吗?
      

  3.   

    比如
    public void f(int[] a)
    {
    }public void f(double[] a)
    {
    }你调用f(null);
    就不行,因为null对以上俩个都适合,编译器不知道调用哪个
    当然又歧义System.out.println(null);
    同理,println()方法也有重载
      

  4.   

    我问下null是对象(Object)吗?
      

  5.   


    f(null)就不行这谁不知道啊!!!我要问的是System.out.println(Object o)这不是他的一种方式吗?
    而null不也是object类型的吗?为什么不行呢?我当然运行了也看到错误了,就是不明白为什么错误吗class Test {
        public static void main(String[] args) {
            System.out.pritnln(null);
        }
    }
    程序很简单就像上面这样
      

  6.   

    我跟你解释半天白解释了你看看System.out.println();
    这个方法里参数可不止Object一种
    什么时候它才会匹配Object你知道么??比如
    class A
    {
    }
    class B extends A
    {
    }public void f(A a)
    {
    }
    public void f(B b)
    {
    }调用f(new B());
    应该是调用后一个,没错吧
    它是从下到上的所以System.out.println(null);
    它最先匹配的不是Object
    只有其他重载的函数里都没有符合的时候才来匹配Object
    可现在不是其他重载的函数没有匹配
    而是有多个匹配明白了吧?
      

  7.   

    System.out.println("");调用的toString()方法。也就是说打印的是字符串
      

  8.   

    就是4楼说的原因。
    举个例子看看:
    public class Main {    public static void main(String[] args) {
            Main m = new Main();
            m.println(null);
        }    public void println(char x[]) {
            System.out.println("char x[]");
        }    public void println(String x) {
            System.out.println("String ");
        }    public void println(Object x) {
            System.out.println("Object");
        }
    }这个例子是有错误的,但是你把public void println(char x[]) 或public void println(String x)中的一个去掉就可以了。
    编译器会进行最接近类型的匹配。
      

  9.   

    null你代码,空的意思,你在System.out.println()里没有加双引号,编译器可能以为是什么指令,去执行,它有没有负值给变量再说他又出现在System里,肯定是乱了阵脚,就出错了!!
      

  10.   

     对 println 的引用不明确,java.io.PrintStream 中的 方法 println(char
    []) 和 java.io.PrintStream 中的 方法 println(java.lang.String) 都匹配