经常听到这样一句话,任何类型与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 在 == 的两端, 我暂时知道了这么多。
分享到:
相关推荐
你是否也为在Oracle里如何实现NULL的比较而犯愁呢?
1663934988460_ErrorInfo(from=0, recognizeType=0, action=110, code=0, msg=null, autoUpload=true, ext=null).pcm
String sql = "select * from (select t1.*,rownum rn from userinfo t1 where rownum<=?"; if (condition.getUsername()!=null&&!condition.getUsername().trim().equals("")) { conditionSql="and ...
希望大家看完了能有所收获。 代码如下: alert(null>=0) 代码如下: 上面的代码会弹出什么来呢?False?True?其实是true。那么是为什么呢?为什么”null>=0″为true呢?null>=0的时候,强转为数字类型。在进行null...
在JavaScript中,null是一个特殊的值,它代表“空值”或“无值”(non-value),与undefined有相似之处,但在进行比较时,它们的行为会有所不同。null和undefined是JavaScript中仅有的几个既不是Object也不是其他...
private static Connection conn = null; private static String aJdbcStr; private static String aUsername; private static String aPassword; private static String aDrv; public void NotesMain() { ...
Point point = null; Point initPoint = null; int value = 0; int type = 0; String name = null; Container pane = null; Spider main = null; boolean canMove = false; boolean isFront = ...
前言 我们已经知道 MySQL 使用 SQL ...=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。 关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。 在 MySQ
86. CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 87. 88. if (!hWnd) 89. { 90. return FALSE; 91. } 92. 93. MoveWindow(hWnd,10,10,600,450,true); 94. ShowWindow(hWnd, ...
或者,你可以使用`"".equals(name)`,这样即使name为`null`,也不会抛出异常: ```java if (!"".equals(name)) { // do something } ``` 接下来,我们来看一个简单的例子,展示了如何正确地检查字符串是否为`null`...
= null ? int.Parse(Request.QueryString[“l”]) : 0; 使用??运算符: 代码如下:int length = int.Parse(Request.QueryString[“l”] ?? “0”); 例2: 代码如下: int? m = null; int n = m == null ? (int)m : 0;...
我们可以看下下面的这几个示例来看看这个操作符的使用方法: 代码如下: string message = “Hello World”; string result = message ?? “null”; //这里的result的内容是 Hello World 再看下面的这个例子子: 代码...
JavaScript 中的 undefined、null、NaN 的区别 在 JavaScript 中,undefined、null、NaN 是三个经常被混淆的概念,但它们有着不同的含义和用途。今天,我们将深入探讨这三个概念的区别和应用。 undefined 在 ...
ICP(In-Circuit Programming)和IAP(In-Application Programming)是STM8L15x支持的两种编程方式,允许用户在电路板上或运行中对微控制器进行编程。这极大地简化了生产过程中的编程和调试步骤,同时也便于现场升级...
1663036726485_ErrorInfo(from=8, recognizeType=3, action=106, code=0, msg=, autoUpload=true, ext=null).pcm
你可以直接用`==`运算符比较数组与NULL,但请注意,这种方式可能产生一些预期之外的结果,因为它还会在非NULL值且值为FALSE时返回TRUE。然而,对于NULL,它是有效的: ```php $array = NULL; if ($array == NULL) {...