我知道==
通常可用于对象比较,前提是您要比较指向同一对象的变量。但是,即使在这些情况下,我认为isEqual:
始终有效。
当您认为比较指针时尝试使用==
是否更好?或者在不比较基元时是否应始终使用isEqual:
?
我倾向于认为通过始终使用isEqual:
,您可以更轻松地判断代码是否一目了然。
答案 0 :(得分:11)
正如您所说,使用==
将比较指针。使用它,您知道这两个对象是否是同一个实例。
使用isEqual:
比较他们的值。
两个不同的NSString可以包含相同的文本:Hello World!
。它们的地址不同(两个不同的对象)但它们的值将是相同的。
在这种情况下,==
将返回NO
,isEqual:
应返回YES
。
示例:强>
NSString* str1 = @"Hello World!";
NSString* str2 = [@"Hello " stringByAppendingString:@"World!"];
if (str1 == str2)
{
NSLog(@"str1 == str2");
}
if ([str1 isEqualToString:str2])
{
NSLog(@"str1 is equal to str2");
}
仅输出:
2013-04-04 21:04:18.365测试[7310:303] str1等于str2
备注:强>
我没有使用:
NSString* str1 = @"Hello World!";
NSString* str2 = @"Hello World!";
因为编译器为文字生成单个对象。在这种情况下,两个等式(==
和isEqual:
)都会得到满足。
答案 1 :(得分:2)
我认为两者之间存在重要区别。
假设您测量房屋左右墙的长度: 左墙长= 5米,右墙长= 5米
isEqual会告诉您两个测量值相同的距离(5m)
==会告诉你,你不只是两次测量同一面墙。
我希望这是有道理的