以下代码的输出是,
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");
}
答案 0 :(得分:3)
当您显式键入@"nick"
或@"1"
时,它是一个字符串文字,为了提高效率,编译器存储在同一个内存位置。如果您以不同的方式创建其中一个字符串,它将出现在不同的内存位置,例如,如果您通过将两个字符串连接在一起来构建第一个字符串。
通常以这种方式比较两个字符串不是你想要做的。通常,您希望比较两个字符串是否相等,并且很少想知道它们是否实际指向相同的内存地址。您应该使用isEqual:
或isEqualToString:
代替。