0

我知道这==通常适用于对象比较,在您比较指向同一对象的变量的情况下。然而,即使在这些情况下,我认为isEqual:总是有效的。

当您认为您正在比较指针时尝试使用更好==,还是应该isEqual:在不比较原语时始终使用?

我倾向于认为,通过始终使用isEqual:,您可以更轻松地一眼看出代码是否存在错误。

4

2 回答 2

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:) 都会得到满足。

于 2013-04-04T18:58:39.417 回答
2

我认为两者之间有一个重要的区别。

假设你测量房子左右墙的长度:左墙长=5米,右墙长=5米

isEqual 会告诉您两个测量值的距离相同(5m)

== 会告诉你,你不只是测量同一面墙两次。

我希望这是有道理的

于 2013-04-04T19:00:36.143 回答