简单字符串方程式

问题描述

|| 我有2个字符串,例如textfield.text和[textArray objectAtIndex:i] 它们包含相同的字符串(并由NSLog测试)。 //这返回一个false
if (textfield.text == [textArray objectAtIndex:i])
//这返回一个true
[textArray replaceObjectAtIndex:i withObject:textfield.text];
if (textfield.text == [textArray objectAtIndex:i])
//这也是对的
if ([textfield.text isEqualToString:[textArray objectAtIndex:i]])
为什么第一个返回假?     

解决方法

        当在NSString *之类的指针上使用==时,它是在比较内存地址,而不是在比较字符串的值。 您的第一个示例:
if (textfield.text == [textArray objectAtIndex:i])
正在比较两个不同的内存地址。由于它们不是相同的存储器地址,因此答案为
false
。 您的第二个示例:
[textArray replaceObjectAtIndex:i withObject:textfield.text];
if (textfield.text == [textArray objectAtIndex:i])
在这里,您已将ѭ6的存储地址分配给ѭ7,从而使它们成为相同的存储地址。因此,存储器地址相同,因此结果为“ 8”。 您的最后一个示例:
if ([textfield.text isEqualToString:[textArray objectAtIndex:i]])
这是评估两个字符串而与内存地址无关的正确方法,因为
isEqualToString
比较字符串的值而不是它们的内存地址。 希望这可以帮助。     ,        
==
运算符测试两个引用是否都指向同一对象,而不是字符串是否相等。如果要比较字符串内容,请使用
isEqualToString:
。     ,        
if (textfield.text == [textArray objectAtIndex:i])
是一个等式(对不起,不是逻辑上的等式)。您不能将其用于字符串。
if ([textfield.text isEqualToString:[textArray objectAtIndex:i]])
但是isEqualToString与上面的语句等效。专门用于字符串。     ,        在第一个示例中,您是否已将对象添加到数组中? 另外,您无法将ѭ15和ѭ11进行比较。您应该使用use12ѭ。