OC— ==与isEqual

==运算符

使用 == 来判断两个变量
当两个变量是基本类型的变量,且都是数值型,则只要两个变量的值相等,使用 == 判断将返回真。
当两个变量是指针类型,它们必须指向同一个对象(即指针变量保存的内存地址相同)时,使用==判断则为真。


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]);
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值