经常听到这样一句话,任何类型与null相比较都应该为flase或 任何对象与null比较陡应该为false。我也经常听到这样的话,有时间自己坐下来没事的时候想想,我不是经常用
if (obj != null)
{
...
}
else
{
...
}
这样的语句吗? 难道是我都做了没必要的功,当然不是了,大家都是这样做的啊!!
哦! 这可能是java编程的一些建议而已吧!
那不如为就看看做些实例看看null 在 == 的两端的待遇是如何的吧
...
Object oA = null;
Object oB = null;
System.out.println(oA == null);
System.out.println(oB == null);
System.out.println(oA == oB);
...
经验告诉我前两句的输出肯定是
TRUE, 最后一个就拿不准了。
打印出来的结果三个 都为
TRUE, 想想跟文章最先说的一句话有心理上的矛盾,因为很多文章讲到关于
equals的重写实现的话都
return false, 那要是两个都为null的对象做比较呢?
又实验了一下:
...
Object oA = null;
Object oB = null;
System.out.println(oA == oB);
System.out.println(oA.equals(oB));
...
想着应该有着喜剧性的结果等待着过吧。
运行一下:

哎呀!java.lang.NullPointerException
伤心!! 说来也是 一个null引用怎么能调用方法呢?
看来自己的这个实验比较失败,但是也算学点东西了。
那继续想自己的正题吧, 到底 == 两端 null还有那些待遇呢?
下面继续写测试代码:
Object oA = null;
String sA = null;
Integer IA = null;
System.out.println(sA == oA);
System.out.println(oA == IA);
System.out.println(sA == IA);
猜猜他们的结果: 前两个为 true 最后一个编译没有通过。
看来java对类型的比较严格的防错判断。
不过在这个例子中还是可以发现父子类型(Integer, String 类型都是 Object 的子类型)是可以用==连接的。如果这个例子可能是有Object(因为Object在java程序员心目中一直都很特殊

)存在的特殊原因的话,不如再做一个通用一些的例子吧。
...
TestSuper tsp = null;
TestSub tsb = null;
...
System.out.println(tsp == tsb);
System.out.println(tsb == tsp);
...
class TestSuper
{
}
class TestSub extends TestSuper
{
}
这段代码的两个输出同样也都为true。
那么现在还有一个问题, 任何对象都可以null引用, 那null是不是对象并且属于Object类型的呢?
...
System.out.println(null instanceof Object);
System.out.println(null == null);
...
上面的结果我们可以发现第一个的结果为false, 第二个的结果为true。
这样我们就可以知道了: 如果我们把null也看成是引用类型的话,但是它没有继承于Object,而且它也没有引用类型的实例化等特性。那么我们就可以看出null是一种单独的类型,即null type 。那么java中有的不仅仅是 引用类型 和 基本类型了 还有一个null type。
最后一个的结果为true, 告诉我们null也是同样符合 == 的操作的, 虽然看样子其他的类型在 == 两端都很排斥它。
null不能跟基本类型进行比较的,这样我们都知道了,就不再做例子了。
关于 null 在 == 的两端, 我暂时知道了这么多。
分享到:
相关推荐
在Web开发中,特别是使用了前端框架(如EasyUI等)的情况下,客户端与服务器端之间的交互方式通常有两种:一种是传统的页面跳转,另一种则是通过Ajax异步请求数据。这两种交互方式在用户体验上有所不同,因此在进行...
以下分别从服务器端和客户端两个方面提供解决方法。 首先,让我们从服务器端开始。在Java的Servlet环境中,处理汉字的关键在于设置正确的字符编码。在给出的示例代码中,我们看到`req.setCharacterEncoding("GBK")`...
小姐姐炫酷唯美引导页.zip
scratch少儿编程逻辑思维游戏源码-让它们跳起来.zip
少儿编程scratch项目源代码文件案例素材-战斗塔防.zip
前端开发_Vue全家桶_vw适配_vux组件库_mescroll滚动_fastclick优化_mock模拟_less预处理器_移动端脚手架_基于Vue2和Webpack3构建的移动
数据可视化分析_微信小程序开发_JavaScript_Canvas图表渲染_数据助手工具_仿微信小程序数据助手_支持线性图圆环图柱状图条形图_动态效果适配_商业数据分析_移动端数据
少儿编程scratch项目源代码文件案例素材-章鱼怪.zip
音乐流媒体_API开发_网易云音乐接口封装与数据抓取_提供完整的网易云音乐API调用解决方案_包含歌曲搜索_MP3资源获取_歌词解析_播放列表管理_歌手专辑查询_专辑详情展示_MV
物联网与健康监测_基于RISC-V架构ESP32-C3芯片与MAX30102MAX30205传感器_LVGL图形界面与WiFiBLE双模通信的智能手表系统_实时监测心率血氧体温
wangtengfei-hn_EmployeesExample_23540_1745868671962
Android开发_自定义View绘制动画效果_模仿小米手环App首页计步数据展示_实现可自定义目标步数当前步数颜色字体大小圆点尺寸的动态步数统计图表组件_用于健康运动类App展示
少儿编程scratch项目源代码文件案例素材-钻机机器人.zip
scratch少儿编程逻辑思维游戏源码-狂暴坦克.zip
scratch少儿编程逻辑思维游戏源码-拳击.zip
scratch少儿编程逻辑思维游戏源码-魔方冲刺.zip
少儿编程scratch项目源代码文件案例素材-重返危机.zip
杰奇CMS小说网站系统_php53-73_mysql5-MariaDB10_utf8mb4编码_GBK自动转码_INNODB存储引擎_多模块支持_前后台分离_电脑手机双版适配_
linyuan620_StockAnalysisAssistant_17128_1745866117970
本系统采用的数据库是Mysql,使用SpringBoot框架开发,运行环境使用Tomcat服务器,ECLIPSE 是本系统的开发平台。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。