我认为 Objective-C 中的变量只是对内存中某处对象的引用。所以根据我的理解,结果一定是“1”,因为最后我将对象的str1的内存地址分配给了str2,而之前我已经分配了str2的内存地址来测试。
NSString *str1 = [NSString stringWithCString:"one"];
NSString *str2 = [NSString stringWithCString:"two"];
test = str2; // test is an instance variable. I use no getter/setter here! just for testing!
str2 = str1;
NSLog(test); // = "two" ??
最佳答案
这就是指针的工作原理。您看到的结果是正常且正确的。
让我们列出所有变量以及它们声明时在内存中指向的字符串:
str1 -> "One"
str2 -> "Two"
然后,执行一些赋值指令:
test = str2;
这会将指针str2
的值分配给test
。所以指针是
str1 -> "One"
str2 -> "Two"
test -> "Two"
然后
str2 = str1;
将指针str1
的值赋给str2
。现在指针是
str1 -> "One"
str2 -> "One"
test -> "Two"
然后打印 test
,它指向 str2
最初指向的内容,即“Two”。
我认为您认为既然您将 str2
分配给 str1
的值,并将 test
分配给 str2
,str1
的值以某种方式级联到 test
中。不是这种情况。一旦分配了 test
的值,有关该值来自何处的信息就会丢失。如果您希望 test
的值与 str1
的值相同,则可以颠倒赋值操作的顺序:
str2 = str1;
test = str2;
关于objective-c - 为什么变量的行为如此奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/801959/