比较NSString

时间:2016-02-08 14:55:52

标签: objective-c

以下代码的输出是,

  

areEqual

     

areEqual

有人可以解释原因吗?

NSString *firstUserName = @"nick";
NSString *secondUserName = @"nick";

if (firstUserName  == secondUserName)
{
    NSLog(@"areEqual");
}
else
{
    NSLog(@"areNotEqual");
}

MyObject *object1 = [[MyObject alloc]init];
object1.identifier = @"1";
MyObject *object2 = [[MyObject alloc]init];
object2.identifier = @"1";

if (object2.identifier  == object1.identifier)
{
    NSLog(@"areEqual");
}
else
{
    NSLog(@"areNotEqual");
}

1 个答案:

答案 0 :(得分:3)

当您显式键入@"nick"@"1"时,它是一个字符串文字,为了提高效率,编译器存储在同一个内存位置。如果您以不同的方式创建其中一个字符串,它将出现在不同的内存位置,例如,如果您通过将两个字符串连接在一起来构建第一个字符串。

通常以这种方式比较两个字符串不是你想要做的。通常,您希望比较两个字符串是否相等,并且很少想知道它们是否实际指向相同的内存地址。您应该使用isEqual:isEqualToString:代替。