理解NSString比较

理解NSString比较

以下两种比较结果均为真:

1)

@"foo" == @"foo";

2)

NSString *myString1 = @"foo";NSString *myString2 = @"foo";myString1 == myString2;

但是,肯定有两次NSStringS不能使用相等运算符进行比较,并且[myString1 isEqualToString:myString2]是必需的。有人能解释一下这件事吗?


素胚勾勒不出你
浏览 598回答 3
3回答

互换的青春

为什么==工作是因为指针比较。当您定义一个常量时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"];

弑天下

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

慕桂英546537

==比较内存中的位置。ptr == ptr2如果它们都指向相同的内存位置。这恰好适用于字符串常量,因为编译器碰巧使用一相同字符串常量的实际字符串。它不会如果变量具有相同的内容,因为它们将指向不同的内存位置,请使用isEqualToString在这种情况下。
打开App,查看更多内容
随时随地看视频慕课网APP