如何解决简单字符串方程式
|| 我有2个字符串,例如textfield.text和[textArray objectAtIndex:i] 它们包含相同的字符串(并由NSLog测试)。 //这返回一个falseif (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ѭ。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。