NSString*str1 = nil;
NSString*str2 = Nil;
NSString*str3 = NULL;
NSNull*str4 = [NSNull null];
NSString*str5 = @"";
NSLog(@" str1:%p str2:%p str3:%p str4:%p str5:%p ", nil, NULL, Nil, [NSNull null], @"");
NSLog(@" str1:%@ str2:%@ str3:%@ str4:%@ str5:%@ ", str1, str2, str3, str4, str5);
结果:
2013-05-09 16:42:00.124 Targets[674:c07]
str1:0x0
str2:0x0
str3:0x0
str4:0x1dc2678
str5:0x46f4
2013-05-09 16:42:04.717 Targets[674:c07]
1.描述
str1:(null)
str2:(null)
str3:(null)
str4:<null>
str5:
====================================
2.描述
Printing description of str1:
<nil>
Printing description of str2:
<nil>
Printing description of str3:
<nil>
Printing description of str4:
<null>
Printing description of str5:
<object returned empty description>
2种方式打印出来的描述不太一样啊。
可以看到 nil,Nil, NULL, 本质上是相同的 都指向0X0 地址
而 【NSNULL null】 和 @“” 应该是在常量存储区的。占用着固定地址。
经验告诉你:NSString 类型去接受一个nsnull类型的数据,很多NSString的方法都不能使用,如下:
str接收了一个nsnull
[str isEqual: @""] //程序崩溃
不能识别isEqual方法
str.length >0 //程序又崩溃
不能识别length属性
而且,nsnull类型都无法和 @“” 、 nil 、Nil 、NULL 比较