我想比较一个变量A是否代表与变量B相同的对象。
我可以使用==运算符吗?
或者这看到了什么呢?我想我需要检查变量所指向的对象的内存地址,对吧?
答案 0 :(得分:35)
==
运算符测试两个表达式是否是指向同一对象的相同指针。 Cocoa将这种关系称为“相同”(例如,参见NSArray的indexOfObjectIdenticalTo:
)。
要测试两个对象是否相等,您可以向其中一个发送isEqual:
消息(或更具体的消息,如isEqualToString:
,如果它响应一个),则传递另一个对象。如果你真的只有一个对象(显然等于它自己)或者你有两个相等的对象,这将返回YES
。在后一种情况下,==
将评估为NO
。
答案 1 :(得分:4)
==告诉您两个指针是否指向同一个对象。 isEqual
告诉您两个对象的内容是否相同(但不一定是实际的同一对象)。有点混乱。
尝试使用此代码更好地理解它:
NSString *aString = [NSString stringWithFormat:@"Hello"];
NSString *bString = aString;
NSString *cString = [NSString stringWithFormat:@"Hello"];
if (aString == bString)
NSLog(@"CHECK 1");
if (bString == cString)
NSLog(@"CHECK 2");
if ([aString isEqual:bString])
NSLog(@"CHECK 3");
if ([bString isEqual:cString])
NSLog(@"CHECK 4");
// Look at the pointers:
NSLog(@"%p", aString);
NSLog(@"%p", bString);
NSLog(@"%p", cString);
答案 2 :(得分:1)
[objectA isEqual:objectB]
通常是个不错的选择。请注意,某些类可能具有更专业的相等功能。 (isEqualToString:
et.al.)这些通常不测试它们是否是同一个对象,但是如果对象是相同的,这是一个独特的概念。 (两个字符串对象可以相等,即使它们没有相同的内存地址。)
答案 3 :(得分:1)
另外两个答案正确回答了标题中的问题。但是,正文中完全不同的问题的正确答案是:是的,==运算符对于测试两个变量是否引用相同的对象是正确的。