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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1722413885 中级黑马   /  2014-4-18 19:20  /  1249 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 1722413885 于 2014-4-20 22:24 编辑

NSString是不可变字符串,是不能改变的,
为什么下面的代码还能运行成功:

  1.    NSString *s = @"sdfsfsffe";
  2.         s = [s substringWithRange:NSMakeRange(2, 3)];
  3.         
  4.         NSLog(@"%@",s);
复制代码
输出结果:014-04-18 19:17:30.204  [1187:303] fsf
s的内容改变了?


评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

4 个回复

倒序浏览
s指针变量的这个地址的内容是不能变了,只能是aaaa
你这样的操作是把指针变量s指向的地址变了,所以内容变了
地址不变内容是不能变的,你可以分别输出s前后的地址就会发现区别

而MutableNSString就不同,地址不变内容也可以改变。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
  1. NSString *s = @"sdfsfsffe";
  2.     s = [s substringWithRange:NSMakeRange(2, 3)];//这是产生了一个新的字符串,指针s指向了他,这样原来的字符串@"sdfsfsffe"就没了,再也找不回,遮掩做很危险,容易丢失数据
  3.    
  4.     NSLog(@"%@",s);
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
NSString *s = @"sdfsfsffe";  这句中的s是指针变量,[s substringWithRange:NSMakeRange(2, 3)]返回一个的字符串;s当然可以指向它。我们说NSString是不可变字符串,在这句中指的是指针s中存储了的那个地址的存储空间不可变,也就是*s不可以变。注意区分:int a[3] = {1,2,3}; a={2,3,4};这行代码是错误的,在这里a是数组名,也就是地址常量,a不可变
回复 使用道具 举报
  s = [s substringWithRange:NSMakeRange(2, 3)];
这个意思是说。
[s substringWithRange:NSMakeRange(2, 3)]
s 执行了  substringWithRange:NSMakeRange方法。从第二个字符,开始取3个字符。然后返回给s

s是指针,也就是s指向了另一个生成的字符串。

评分

参与人数 1技术分 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马