OC中==与isEqual

学习目标
1. ==
2. isEqual

学习过程
1. “==”  :对比的是值, 返回BOOL型
(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比较,则全部都相等。












 

  

   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值