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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gamyc 中级黑马   /  2015-5-28 10:46  /  679 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. //创建可变字符串
  2. NSMutableString *str = [NSMutableString string];
  3. //设定字符串的内容
  4. str.string = @"zhangsan";
  5. //创建对象
  6. Person *person = [Person new];
  7. //给person的实例变量赋值
  8. person.name = str;
  9. //修改字符串内容
  10. [str appendString:@"xxxx"];
  11. NSLog(@"name = %@",person.name);
  12. NSLog(@"str = %@",str);
复制代码



为什么运行结果是:
name = zhangsanxxxx
str = zhangsanxxxx

而不是:
name = zhangsan
str = zhangsanxxxx

3 个回复

倒序浏览
貌似定义 Person中 的name的时候是这样定义的:NSString *name;
这样就一改全改了。

回复 使用道具 举报
//给person的实例变量赋值
person.name = str;
这样就使得person.name  这个属性指向了str的内存地址,你改变str了,那么这个属性的值也会跟着变的
回复 使用道具 举报
无论是person.name还是str,它俩都指向的一个字符对象。当person.name = str; 时表示它俩指向的是同一个字符对象。 [str appendString:@"xxxx"];//这句是通过str找到它指向的对象进行了修改。注意此时person.name也指向这个对象。哈哈,当通过person.namer找到它指向的对象,不也变了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马