为了账号安全,请及时绑定邮箱和手机立即绑定

理解NSString比较

理解NSString比较

素胚勾勒不出你 2019-07-08 12:45:32
理解NSString比较以下两种比较结果均为真:1)@"foo" == @"foo";2)NSString *myString1 = @"foo";NSString *myString2 = @"foo";myString1 == myString2;但是,肯定有两次NSStringS不能使用相等运算符进行比较,并且[myString1 isEqualToString:myString2]是必需的。有人能解释一下这件事吗?
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

为什么==工作是因为指针比较。当您定义一个常量时NSString使用@"",编译器统一引用。当在代码中的其他地方定义相同的常量时,它们都指向内存中相同的实际位置。

比较时NSString实例时,应该使用isEqualToString:方法:

NSString *myString1 = @"foo";NSString *myString2 = @"foo";NSString *myString3 = [[NSString alloc] initWithString:@"foo"];
NSLog(@"%d", (myString2 == myString3))  //0NSLog(@"%d", (myString1 == myString2)); 
//1NSLog(@"%d", [myString1 isEqualToString:myString2]);
 //1NSLog(@"%d", [myString1 isEqualToString:myString3]); 
 //1[myString3 release];

编辑:

NSString *myString3 = [[NSString alloc] initWithString:@"foo"]; // this is same with @"foo"

initWithString:不再创建新的引用,您将需要initWithFormat,

NSString *myString3 = [[NSString alloc] initWithFormat:@"foo"];


查看完整回答
反对 回复 2019-07-08
?
弑天下

TA贡献1818条经验 获得超7个赞

相等算子==只比较指针地址。当使用文字创建两个相同的字符串时@""语法时,编译器将检测到它们是否相等,并且只存储一次数据。因此,这两个指针指向同一个位置。但是,通过其他方法创建的字符串可能包含相同的数据,但存储在不同的内存位置。因此,你应该使用isEqual:比较字符串时。

请注意isEqual:isEqualToString:总是返回相同的值,但是isEqualToString:更快。


查看完整回答
反对 回复 2019-07-08
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

==比较内存中的位置。ptr == ptr2如果它们都指向相同的内存位置。这恰好适用于字符串常量,因为编译器碰巧使用相同字符串常量的实际字符串。它不会如果变量具有相同的内容,因为它们将指向不同的内存位置,请使用isEqualToString在这种情况下。


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 596 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信