oc学习之==和isEqual方法

测试两个变量是否相等的两种方式
对于两个指针类型的变量,它们必须指向同一个对象才相等。
#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]一定返回假

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值