NSString *str1 = @"12345"; // 存储常量区
NSString *str2 = @"12345"; // 存储常量区
NSLog(@"str1和str2地址:%p -- %p", str1,str2);
NSLog(@"%d",str1 == str2);
NSLog(@"%d", [str1 isEqualToString:str2]);
NSString *str3 = [NSString stringWithFormat:@"12345"]; // 存储堆区
NSString *str4 = [NSString stringWithFormat:@"12345"]; // 存储堆区
NSLog(@"str3和str4地址:%p -- %p", str3,str4);
NSLog(@"%d",str3 == str4);
NSLog(@"%d", [str3 isEqualToString:str4]);
结果都输出 true
str1和str2地址:0x10986c068 -- 0x10986c068
true
true
str3和str4地址:0xa000035343332315 -- 0xa000035343332315
true
true
按理说,创建的两个字符串的地址是不相同的,但是系统在短时间内创建相同的字符串,会使用上次创建的字符串,不会再开辟新的地址。(代码区给字符串开辟空间,相同的字符串不会开辟新的空间)
网友评论