A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天晚上在做作业时,发现个古怪的现象:
  1. NSString *str1 = @"hello";
  2.         
  3.         NSArray *arr1 = @[@"test",@"hello",@"world",@"nice"];
  4.         
  5.         // 这个方法比较的是地址
  6.         NSLog(@"%ld",[arr1 indexOfObjectIdenticalTo:str1]);
  7.         // 这个方法比较的是内容
  8.         NSLog(@"%ld",[arr1 indexOfObject:str1]);
复制代码
可是这个运行的结果是:
  1. 2015-04-09 20:56:17.209 Test[2154:396477] 1
  2. 2015-04-09 20:56:17.210 Test[2154:396477] 1
  3. Program ended with exit code: 0
复制代码

由此可见两个查找的结果是相同的。
为什么会这样啊?

5 个回复

正序浏览
Nicholas_Chow 发表于 2015-4-10 14:33
没有自己去实践,我想可能是跟字符串常量的存储方式有关。
字符串常量存储在常量存储区,给arr1[1]赋值@"he ...

好的  谢谢
回复 使用道具 举报
没有自己去实践,我想可能是跟字符串常量的存储方式有关。
字符串常量存储在常量存储区,给arr1[1]赋值@"hello"时,因为前面已经有一个@"hello"了,所以会直接使用之前的对象,不会再新建一个对象。
回复 使用道具 举报
iMcG33k 发表于 2015-4-10 13:03
1不对么? 0是test    1是hello,这有啥问题

1是对的,但是为什么str1和arr1[1]是使用的相同的内存呢
回复 使用道具 举报
1不对么? 0是test    1是hello,这有啥问题
回复 使用道具 举报
自己顶个,求指教。不明白为什么通过地址比较的时候,也可以找到所在的序列
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马