简单的弦方程

时间:2011-06-13 01:25:36

标签: iphone objective-c

我有2个字符串,比如textfield.text和[textArray objectAtIndex:i] 它们包含相同的字符串(并由NSLog测试)。

//这会返回false

if (textfield.text == [textArray objectAtIndex:i])

//这会返回一个真实的

[textArray replaceObjectAtIndex:i withObject:textfield.text];
if (textfield.text == [textArray objectAtIndex:i])

//这也是真的

if ([textfield.text isEqualToString:[textArray objectAtIndex:i]])

为什么第一个返回假?

4 个答案:

答案 0 :(得分:4)

==运算符测试两个引用是否指向同一个对象,而不是字符串相等。如果要比较字符串内容,请使用isEqualToString:

答案 1 :(得分:4)

当你在NSString *之类的指针上使用==时,它会比较内存地址,而不是比较字符串的值。

你的第一个例子:

if (textfield.text == [textArray objectAtIndex:i])

比较两个不同的内存地址。由于它们不是相同的内存地址,因此答案为false

你的第二个例子:

[textArray replaceObjectAtIndex:i withObject:textfield.text];
if (textfield.text == [textArray objectAtIndex:i])

在这里,您已将textfield.text的内存地址分配到[textArray objectAtIndex:i],从而使它们成为相同的内存地址。因此,内存地址相同,因此结果为true

你的最后一个例子:

if ([textfield.text isEqualToString:[textArray objectAtIndex:i]])

无论内存地址如何,都是评估两个字符串的正确方法,因为isEqualToString会比较字符串的值而不是内存地址。

希望这有帮助。

答案 2 :(得分:3)

if (textfield.text == [textArray objectAtIndex:i])

是一个平等(不是逻辑平等对不起)。你不能将它用于字符串。

if ([textfield.text isEqualToString:[textArray objectAtIndex:i]])

但是isEqualToString相当于上面的语句。特别是对于字符串。

答案 3 :(得分:2)

在第一个例子中,您是否已将对象添加到数组中?

作为旁注,您无法将NSStrings==进行比较。您应该使用isEqualToString: