A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© theNo.1 中级黑马   /  2014-5-29 01:43  /  2504 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

首先,二话不说,先贴一段代码给大伙儿看看



程序正常通过




好的,现在把注释去掉,大伙儿再来看看




聪明的你一定猜出我要问的问题了吧 。是的,你说 System.out.println()这个方法为什么打印show方法返回来的null可以,
当直接打印 System.out.println(null) 的时候就挂了呢 ??   
null 到底是何方神圣,请小伙伴们都来评论评论 。。  :P


13 个回复

倒序浏览
如果把null变成“null”呢;P
回复 使用道具 举报 1 0
那当然还是打印null了呀,我刚测试了。
回复 使用道具 举报 1 0
你要明确你systemout.println里面的null 是什么,你即使不写null,写其他的不带双引的 也是报这个错。

评分

参与人数 1黑马币 +1 收起 理由
格子、 + 1

查看全部评分

回复 使用道具 举报 1 0
错误提示已经说了啊,你传递进去null这个参数对应能匹配到多个方法,比如print(char[] s) 、print(Object obj) 、print(String s) 等,编译器就不知道该调用哪个重载方法了,当然就报错了;如果Sun只提供了一个print(char [] s)或print(String s)方法的话,就不会有问题了。

详细可以参看PrintWriter类中print方法。
回复 使用道具 举报 1 0
默认值不能打印的
回复 使用道具 举报
首先你输入的null不是数字,是字符串,但你又没有加上双引号,所以程序无法识别你输入的到底是什么类型的数据,没有匹配的输出方法,肯定报错啊!
回复 使用道具 举报
满面春风 发表于 2014-5-31 23:31
首先你输入的null不是数字,是字符串,但你又没有加上双引号,所以程序无法识别你输入的到底是什么类型的数 ...

那为什么返回的就没有错了
回复 使用道具 举报
本帖最后由 陈云阳 于 2014-6-1 19:31 编辑

楼主很有求知欲不错,不过该问题涉及到面向过程的,是需要深入函数更深的问题,   一个是函数简单的重载的问题,楼主了解就好,不必要纠结
null是一个特殊的关键字,是用来初始化用的,调用show返回的return null;是一个字符串数值,在内存中存在的,被printl字符参数的重载函数接收,并以字符串打印出来,而你直接println(null),这时的null不存在内存中,但是作为接收参数既被当成字符串数组接收参数,又被当做字符串,    println(char[])和println(String s)都能接收,这时虚拟机不知道该调用哪个重载函数  所以出错,
这里涉及到的面向过程的问题,需要学习c++和c语言深入了解函数的机制,所以楼主你只需要记住结果就好,我们是学面向对象的,不用去管面向过程,小毕老师不是说过嘛。
下面我用show函数模拟println的俩个重载函数接收参数给楼主列出来,楼主你去运行一下,然后把下面代码的注释去掉  再运行一次,就知道了
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 show(null);
  6.                
  7.         }

  8.         public static String show(String i)
  9.         {
  10.                 return "deng";
  11.         }
  12.         /*public static String show(char [] s)
  13.         {
  14.                 return "keng";
  15.         }*/
  16. }
复制代码







回复 使用道具 举报
因为你上下文中都没有定义过null,你要打印的null究竟是什么,其次就算你写个int  null=0;更是不肯能的。
回复 使用道具 举报
theNo.1 发表于 2014-6-1 00:20
那为什么返回的就没有错了

因为你在函数中返回时,指明了数据的类型,就不会有问题了
回复 使用道具 举报
null表示为空,不指向任何数据。主要是数据类型的问题,char【】数据可以为null,string也可以,匹配到两个函数,就有问题了
回复 使用道具 举报
陈云阳 发表于 2014-6-1 18:48
楼主很有求知欲不错,不过该问题涉及到面向过程的,是需要深入函数更深的问题,   一个是函数简单的重载的 ...

懂了 ,很谢谢你 !:)
回复 使用道具 举报
theNo.1 发表于 2014-6-1 00:20
那为什么返回的就没有错了

你的方法是String类型的。所以方法返回的是字符串,也就是"null",而你直接输出的是null,没有明确类型。所以会的报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马