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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 朱玉玺 于 2013-2-5 23:54 编辑

闲话少叙,上代码:
  1. short d1=0,d2=1;   //这里的short换成其他基本数据类型都可以,   
  2. d2=d1<d2?null:d2;
复制代码
这个编译可以通过,但会报空指针异常,如果改成d1>d2,则不会报错;把null换成其他数据类型也会报错。我的问题是:三元运算符中null可以参与基本数据类型运算,这种情况是为什么呢?null在内存中占几个字节?
————————————————————————————
有朋友解释说空指针异常是运行时异常,所以编译器不会报错,但运行时如果调用就会出问题,我觉得这个解释靠谱~

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

6 个回复

正序浏览
朱玉玺 发表于 2013-2-6 20:15
“所有的引用变量大小都一样”,每个引用变量的大小是多少?几个字节?怎么查看? ...

书上没说,书上说即使知道你也没法用它做除了取得对象之外的事。我猜应该和地址空间的大小有关。
回复 使用道具 举报
王昕 发表于 2013-2-6 18:32
对于任意一个Java虚拟机来说,所有的引用变量大小都一样,但不同的Java虚拟机间可能会以不同的方式来表示引 ...

“所有的引用变量大小都一样”,每个引用变量的大小是多少?几个字节?怎么查看?
回复 使用道具 举报
对于任意一个Java虚拟机来说,所有的引用变量大小都一样,但不同的Java虚拟机间可能会以不同的方式来表示引用因此某个Java虚拟机的引用大小可能会大于或小于另一个Java虚拟机的引用。null就是引用的空值,和引用的其它可能值长度一样。
回复 使用道具 举报
你试一下就可以了。你的问题,和三元运算符无关,只是一个类型转换的问题。这是我的意思。
回复 使用道具 举报
dzr19850306 发表于 2013-2-5 22:49
拜托不要弄得这么麻烦好不。
int i=1;
i=null;

i=null;这句你编译能通过吗?
回复 使用道具 举报
拜托不要弄得这么麻烦好不。
int i=1;
i=null;
不同的类型转换问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马