null和空字符有区别吗?
发布网友
发布时间:2022-04-23 01:00
我来回答
共6个回答
热心网友
时间:2022-04-08 10:50
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”); //于堆上分配内存
请添加详细解释
热心网友
时间:2022-04-08 12:08
学习C++中最重要的是关注类型,类型不同数据宽度及编码就不同。表面上看null的定义和空字符等效都是0值,但是用途以及类型完全不同,为了代码可读性以及避免同一个程序在不同编译器上出现不同的结果(不同编译器存在的隐含操作不同)造成跨编译器无法编译的问题,编写代码时最好不要依赖编译器的隐式转换。
null的定义为(void *)0,也就是将0值定义为无类型的指针值,一个地址常数0,一般地址的数据宽度都是32位的,代表指针为空指针,无效指针,即没有指向任何地址,而地址是无符号整数。
'\0'空字符则是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,字符只用'\0',这样比较明确。
热心网友
时间:2022-04-08 13:42
空字符串不是null。千万别这么想
热心网友
时间:2022-04-08 15:34
null是未知类型,空代表没有
热心网友
时间:2022-04-08 17:42
有本质的区别哦
热心网友
时间:2022-04-08 20:06
NULL说明:
1、等价于没有任何值、是未知数。
2、NULL与0、空字符串、空格都不同,NULL没有分配存储空间。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、NULL的处理使用NVL函数。
5、比较时使用关键字用“is null”和“is not null”。
6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(*)中,用nvl(列名,0)处理后再查。
7、排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后。
可以简单理解为空字符串''就是null,
比如:
因为''就是null那么select 1 from al where null=''''; 这条语句就被解析成
select 1 from al where null=null;当然就没有记录了。其他的雷同
所以 select 1 from al where '' Is Null;结果自然是有一条记录了