我是靠谱客的博主 故意音响,最近开发中收集的这篇文章主要介绍null和空字符的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

null和空字符的区别:

1、NULL:代表声明了一个空对象,不是一个字符串,可以赋给任何对象。 

空字符:代表声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串。

2、String s=null; 只是定义了一个句柄,即你有了个引用,但是这个引用未指向任何内存空间。

String s=”“; 这个引用已经指向了一块是空字符串的内存空间,是一个实际的东东了,所以可以对它操作。

String s=”a”和String s=new String(“a”);是有本质上的区别的 :

(1) 前者是在字符串池里写入一个字符’a’,然后用s指向它; 后者是在堆上创建一个内容为”a”的字符串对象。

(2) String str=”aaa”; //于栈上分配内存 ;

String str=new String(“aaa”); //于堆上分配内存

3、null的定义为(void *)0,也就是将0值定义为无类型的指针值,一个地址常数0,一般地址的数据宽度都是32位的,代表指针为空指针,无效指针,即没有指向任何地址,而地址是无符号整数。

4、''空字符则是char类型的0值,char在C++中是单字节宽度的有符号整数(C#中是32位Unicode字符),所以null和空字符的区别是类型,而类型决定了数据宽度以及编码,虽然说0值在任何场合都是通用的,但是编译器在最终编译时需要确定数据宽度以及编码方式,指针是32位无符号整数(4字节,即0x00000000),而char是8位有符号整数(1字节,0x00)。

虽然你在C++中也可以像char c=null这样写,因为编译器会隐式转换,将(void *)转换为 char,也即将32位的0值截断,丢弃高位3字节,用低位的单字节赋值给char变量(否则就会覆盖冲掉到其他地址中的内容引起程序错误),但是为了可读性以及移植性,指针只用null,字符只用'',这样比较明确。

5、NULL说明:
1、等价于没有任何值、是未知数。
2、NULL与0、空字符串、空格都不同,NULL没有分配存储空间。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、NULL的处理使用NVL函数。
5、比较时使用关键字用“is null”和“is not null”。
6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(*)中,用nvl(列名,0)处理后再查。
7、排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后。
 

最后

以上就是故意音响为你收集整理的null和空字符的区别的全部内容,希望文章能够帮你解决null和空字符的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部