isEqual以及==

前言

  • isEqualToString以及==是在OC中比较让人疑惑的一环
  • 发现网上很多博客其实都在互相拷贝,错误的回答一遍一遍被重复下去
  • 所以我也说不上什么深奥的见解,但我全部使用编译器打印来说明

结论

  • 先说毋庸置疑的结论:isEqualToString方法比较的是内容,==比较的是地址

打印比较

代码

				NSString *a = [NSString stringWithFormat:@"123"];
        NSString *b = [NSString stringWithFormat:@"123"];
        
        NSString *c = @"123";
        NSString *d = @"123";
        NSLog(@"a:%@", a);
        NSLog(@"b:%@", b);
        NSLog(@"c:%@", c);
        NSLog(@"d:%@", d);
        NSLog(@"\nNSString *a:%p\nNSString *b:%p\nNSString *c:%p\nNSString *d:%p", a, b, c, d);
        NSLog(@"a:c %d %d", (a == c), [a isEqualToString:c]);
        NSLog(@"a:b %d %d", (a == b), [a isEqualToString:b]);
        NSLog(@"c:d %d %d", (c == d), [c isEqualToString:d]);

打印结果

a:123
b:123
c:123
d:123 
NSString *a:0xa8fc548c5c77fe05
NSString *b:0xa8fc548c5c77fe05
NSString *c:0x100001068
NSString *d:0x100001068
a:c 0 1
a:b 1 1
c:d 1 1

思考

  • 我们没办法弄出一个地址一样,内容不一样的来比较,所以也没办法反面验证
  • 而NSString *a = [NSString stringWithFormat:@“123”];以及NSString *c = @“123”;一个是通过方法创建,一个是通过常量来创建
  • 而这两种方式使用内存的地方是不一样,所以根据比较可以得出结论
  • 深入探究可以百度下常量池
  • 而很多地方认为a b用==比较是不相等的,然而事实证明两者是相等的,地址也是一样的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值