2. 【数】零的
n.
1. 【数】零
vt.
1. 使无效
在编程中。null 值指出一个变量中没有包含有效的数据。
产生 null 的原因是:
在程序设计中是一个存在的变量的值
但是你应该问是在什么情况下用的或在什么地方用,
意义都不一样,表现出来也不一样。
对一个变量显式地赋值为 null。
包含 null 的表达式之间的任何操作。
Null在数据库中表示 不知道(Unknown) 的数据,主要有3种意思:
1)知道数据存在,但不知道具体值
2)不知道数据是否存在
3)数据不存在
定义:
null表示no value,unknown,它不表示0,也不表示一个空的字符串。
SQL函数中的NULL
所有的函数,除了REPLACE , NVL , CONCAT以外,如果你用null作为它的参数,那么结果就是返回null。
大部分的聚集函数如(COUNT,AVG),他们会忽略null,如一个列上面有10行记录,其中2行是null,那么count这个列的结果就是8。
例如
在增加月份函数中使用null进行计算的情况:
SQL> select to_char(sysdate,'yyyy-mm-dd') today from dual;
TODAY
----------
2007-09-23
SQL> select to_char(add_months(sysdate,1),'yyyy-mm-dd') another_day from dual;
ANOTHER_DA
----------
2007-10-23
SQL> select to_char(add_months(sysdate,null),'yyyy-mm-dd') another_day from dual;
ANOTHER_DA
----------
聚集函数的情况:
22:11:28 SQL> select empno,ename,comm from emp;
EMPNO ENAME COMM
---------- ---------- ----------
7369 SMITH
7499 ALLEN 300
7521 WARD 500
7566 JONES
7654 MARTIN 1400
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER 0
7876 ADAMS
7900 JAMES
7902 FORD
7934 MILLER
已选择14行。
22:11:43 SQL> select count(empno) from emp;
COUNT(EMPNO)
------------------------
14
22:12:05 SQL> select count(comm) from emp;
COUNT(COMM)
-----------------------
4
条件中的null。
对NULL所进行的任何数学计算结果都是null,如10+null结果是null。
oracle始终认为两个null是不相等的(除了少数情况),不能用null=null这个条件来进行判断两个null是否相等,null不等于其他的null,你只能用is null或者is not null来判断某个记录的某个字段是不是null。
但是oracle在使用decode函数的时候,它认为两个null是相等的。
oracle还有一种情况也认为两个不同的null是相等的,就是在一个复合键中,如果这两个复合键值中非null部分是相等的,那么这两个复合键值是相等的。
下面给出null出现的条件表格:
如果a是 | 比较条件是 | 那么结果是 |
10 | a IS NULL | FALSE |
10 | a IS NOT NULL | TRUE |
NULL | a IS NULL | TRUE |
NULL | a IS NOT NULL | FALSE |
10 | a = NULL | UNKNOWN(其实就是null) |
10 | a != NULL | UNKNOWN |
NULL | a = NULL | UNKNOWN |
NULL | a != NULL | UNKNOWN |
NULL | a = 10 | UNKNOWN |
NULL | a != 10 | UNKNOWN |
例如:
22:25:00 SQL> select empno,ename,comm from emp;
EMPNO ENAME COMM
---------- ---------- ----------
7369 SMITH
7499 ALLEN 300
7521 WARD 500
7566 JONES
7654 MARTIN 1400
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER 0
7876 ADAMS
7900 JAMES
7902 FORD
7934 MILLER
已选择14行。
已用时间: 00: 00: 00.09
22:25:06 SQL> select empno,ename,comm from emp where comm=null;
未选定行
已用时间: 00: 00: 00.01
22:25:14 SQL> select empno,ename,comm from emp where comm <> null;
未选定行
已用时间: 00: 00: 00.01
22:25:21 SQL> select empno,ename,comm from emp where comm is null;
EMPNO ENAME COMM
---------- ---------- ----------
7369 SMITH
7566 JONES
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7876 ADAMS
7900 JAMES
7902 FORD
7934 MILLER
已选择10行。
已用时间: 00: 00: 00.04
22:25:27 SQL> select empno,ename,comm from emp where comm is not null;
EMPNO ENAME COMM
---------- ---------- ----------
7499 ALLEN 300
7521 WARD 500
7654 MARTIN 1400
7844 TURNER 0
已用时间: 00: 00: 00.01
java中null是所有类未实例化的一个对象 <script src="http://blog.csdn.net/count.aspx?ID=1502561&Type=Rank" type="text/javascript"></script>
private void print(Integer some)...{
System.out.println("Integer");
}
private void print(Object some)...{
System.out.println("Object");
}
public static void main(String[] args)
...{
Test test = new Test();
test.print(null);
}
}
以上代码运行结果:Integer
两个问题1、null的向上转型
2、null本质
null是所有类的未实例化的一个对象,所以他可以转型成由低向上的转型。
如果转型的几个类是有上而下继承下来,null转成最低层的那个类。
java.lang
class Integer
java.lang.Object
¦
+--java.lang.Number
¦
+--java.lang.Integer
在这里,NULL既是Integer的对象,也是Object的对象,而且Integer类继承于Object 类,所以在这种情况下,沿着继承的路线从下往上搜索匹配的情况
1:null与“”
String aa =null 只是声明了一个引用,该引用没有指向任何对象(即没有开辟任何内存空间给aa)
String aa="" 不但声明了一个引用,而且该引用指向一String对象""
2:java.lang.NullPointerException(空指针异常)
String aa =null 你调用aa.toString()会有空指针异常
String aa="" 你调用aa.toString()是不会有空指针异常
3:null与数值0
null是对对象来说的,比如JTextField a=null,这时a并不指向任何对象,只是把它声明为一个可以指向JTextField 的对象变量,
而0是对数值类型来说的,比如int i=0,引用一个为null值得对象会产生NullPointException异常,但 引用一个值为0的数值不会产生错误
4:
null 是 Java 的保留字,表示无值。
示例
Integer i; i = null;
String s; if (s != null) { <statements> }
注释
-
将 null 赋给非原始变量相当于释放该变量先前所引用的对象。
-
不能将 null 赋给原始类型(byte、short、int、long、char、float、double、boolean)变量。