我知道这==
通常适用于对象比较,在您比较指向同一对象的变量的情况下。然而,即使在这些情况下,我认为isEqual:
总是有效的。
当您认为您正在比较指针时尝试使用更好==
,还是应该isEqual:
在不比较原语时始终使用?
我倾向于认为,通过始终使用isEqual:
,您可以更轻松地一眼看出代码是否存在错误。
我知道这==
通常适用于对象比较,在您比较指向同一对象的变量的情况下。然而,即使在这些情况下,我认为isEqual:
总是有效的。
当您认为您正在比较指针时尝试使用更好==
,还是应该isEqual:
在不比较原语时始终使用?
我倾向于认为,通过始终使用isEqual:
,您可以更轻松地一眼看出代码是否存在错误。
使用==
, 正如你所说的将比较指针。使用它,您可以知道这两个对象是否是同一个实例。
通过使用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:
) 都会得到满足。
我认为两者之间有一个重要的区别。
假设你测量房子左右墙的长度:左墙长=5米,右墙长=5米
isEqual 会告诉您两个测量值的距离相同(5m)
== 会告诉你,你不只是测量同一面墙两次。
我希望这是有道理的