==运算符
使用 == 来判断两个变量
当两个变量是基本类型的变量,且都是数值型,则只要两个变量的值相等,使用 == 判断将返回真。
当两个变量是指针类型,它们必须指向同一个对象(即指针变量保存的内存地址相同)时,使用==判断则为真。
isEqual
isEqual:方法是NSObject类提供的一个实例方法。NSObject默认提供的isEqual:只是比较对象的地址,即NSObject类的isEqual:方法比较的结果与== 运算符比较的结果相同。但在实际应用中常常需要 自定义相等标准,可以通过重写isEqual:方法来实现。
重写isEqual
定义FKUser接口部分
#import <Foundation/Foundation.h>
@interface FKUser : NSObject
@property (nonatomic, copy) NSString* name;
@property (nonatomic, copy) NSString* idStr;
- (id) initWithName: (NSString*) name idStr: (NSString*) idStr;
@end
FKUser实现部分
#import "FKUser.h"
@implementation FKUser
- (id) initWithName: (NSString*) name idStr: (NSString*) idStr {
if(seif = [super init]) {
self.name = name;
self.idStr = idStr;
}
return self;
}
//重写isEqual:方法,提供自定义的相等标准
- (BOOL) isEqual: (id) other {
if(self == other) { //如果两个对象为同一对象
return YES;
}
//当other不为nil,且它是FKUser类的实例时
if(other != nil && [otherisMemberOfClass:FKUser.class]) {
FKUser* target = (FKUser*)other;
return [self.idStr isEqual: target.idStr];
}
return NO;
}
@end
程序如下:
#import <Foundation/Foundation.h>
#import "FKUser.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
FKUser* p1 = [[FKUser alloc] initWithName:@"孙悟空" idStr: @"1234"];
FKUser* p2 = [[FKUser alloc] initWithName:@"孙行者" idStr: @"1234"];
FKUser* p3 = [[FKUser alloc] initWithName:@"孙xx" idStr: @"4321"];
//p1和p2的idStr相等,所以输出1 为真
NSLog(@"p1和p2是否相等?%d", [p1 isEqual: p2]);
//p2和p3的idStr不相等,所以输出0 为假
NSLog(@"p2和p3是否相等?%d", [p2 isEqual: p3]);
}
}