测试两个变量是否相等的两种方式
对于两个指针类型的变量,它们必须指向同一个对象才相等。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//s1,s2直接指向常量池中的“疯狂ios"
NSString *s1 = @"疯狂ios";
NSString *s2 = @"疯狂ios";
//看到s1, s2两个指针保存的地址值完全相等
NSLog(@"s1地址:%p, s2地址:%p",s1, s2);
//所以下面的程序输出1代表真
NSLog(@"s1与s2是否相等:%d", (s1 == s2));
//让s3指向新生成的对象
NSString *s3 = [NSString stringWithFormat: @"疯狂ios"];//在堆内存中
//输出s3指针变量中保存的地址值与s1,s2并不相同
NSLog(@"s3地址:%p", s3);
//所以下面的程序输出0代表假
NSLog(@"s1与s3是否相等:%d", (s1==s3));
}
return 0;
}
常量池保证相同的字符串直接量只有一个,不会产生多个副本。所以s1,s2两个指针变量保存的地址值完全 相同。
isEqual方法判断两个字符串是否相等,不看位置,存在哪里。(NSString *)类
在NSObject类中的isEqual方法,与==判断标准没有区别,同样要求两个指针变量指向同一对象才返回真。
正确的重写isEqual方法方法应该满足下列条件:
自反性,对称性,传递性,一致性,对任何不是nil的x ,[x is Equal: nil]一定返回假