(1)比较数值型,只要值相同就是返回1,否则返回0, 比如:
void f1() {
int a = 100;
float b = 100.0;
BOOL r = a==b;
NSLog(@"r = %d", r);//r = 1
}
(2)比较对象
XStu* p1 = [XStu new];
XStu* p2 = [XStu new];
BOOL r = p1==p2;
NSLog(@“%d", r);//0
(3)比较字符串
void f2() {
NSString* str1 = @"小明30岁";
NSString* str2 = @"小明30岁";
BOOL r = str1==str2;
NSLog(@"r = %d", r);//r = 1;
}
void f3() {
NSString* str1 = [NSString stringWithFormat:@"小明30岁"];
NSString* str2 = [NSString stringWithFormat:@"小明30岁"];
BOOL r = str1==str2;
NSLog(@"r = %d", r);//r = 0;
}
2.NSObject中方法: -(BOOL) isEqual:(id)object
(1)该方法会传给所有类。所有类的对象都可以调用这个实例方法。
(2)方法的作用是对比两个对象指针是否指向同一个对象,即使用了“==”来比较两个指针值;对比的两个对象指针只要有一个值为nil那么,结果就为假;对比的两个对象指针都为nil,结果也为假;(为nil的指针可以调用方法)
比如,下面有XStu类,XStu类中没有重写isEqual方法
void f7() {
XStu* p1 = nil;
XStu* p2 = nil;
BOOL b1 = [p1 isEqual:p2];//0
p1 = [XStu new];
BOOL b2 = [p1 isEqual:p2];//0
p2 = [XStu new];
BOOL b3 = [p1 isEqual:p2];//1
NSLog(@"b1=%d, b2=%d, b3=%d", b1, b2, b3);//b1=0, b2=0, b3=0
}
(3)NSObject想改变isEqual的作用的话,可以重写isEqual方法。
示例:
//XStu.h #import <Foundation/Foundation.h> @interface XStu : NSObject @property NSString* name; @property int age; -(BOOL) isEqual:(id)object; @end | |
//XStu.m #import <Foundation/Foundation.h> #import "XStu.h" @implementation XStu @synthesize name; @synthesize age; -(BOOL) isEqual:(id)object { if (self == object) { return YES; } if (object == nil) { return NO; } XStu* p = (XStu*)object; if ([self.name isEqual:p.name] && self.age==p.age) { return YES; }else { return NO; } } @end // main.m #import <Foundation/Foundation.h> #import "XStu.h" void f6() { XStu* p1 = [XStu new]; p1.name = @"小明"; p1.age = 10; XStu* p2 = [XStu new]; p2.name = @"小明"; p2.age = 10; if ([p1 isEqual:p1]) { NSLog(@"xp1 == p2");//xp1 == p2 }else { NSLog(@"xp1 != p2"); } } int main(int argc, const char * argv[]) { @autoreleasepool { f6(); } return 0; } |
3.比较NSString
(1)NSString中重写了isEqual方法,作用为只要字符串内容相同都返回YES,否则返回NO,
参与比较的两个NSString,只要其中有一个为nil也返回NO;
(2)==比较NSString是看两个NSString是否为同一个对象
比如:
NSString* str1= @"小明30岁";
NSString* str2 = @"小明30岁";
NSString* str3 = [NSString stringWithFormat:@"小明30岁"];
NSString* str4 = [NSString stringWithFormat:@"小明30岁"];
NSString* str5 = [NSString stringWithFormat:@"小明%d岁", 30];
上面str1, str2, str3, str4, str5两两相比较时,如果使用==比较,只有str1等于str2;
如果使用isEqual比较,则全部都相等。