【问题标题】:If "a == b" is false when comparing two NSString objects如果 "a == b" 在比较两个 NSString 对象时为假
【发布时间】:2012-01-25 18:47:43
【问题描述】:

我有一个具有可访问方法的类,该方法在调用时传回NSString

[MyClass getMyString]

该类中的字符串变量实际上是在如下表的didSelectRowAtIndexPath: 部分中分配的:

myString = cell.textLabel.text;

当我通过调用该方法检索字符串时,我将它分配给调用它的类中的另一个字符串,并将它与我定义的字符串进行比较

NSString *mySecondString;
mySecondString = @"my value";

if(mySecondString == myString){
    i = 9;
}

我已经单步执行了代码,每次它评估 if 语句时,它都会跳过 i=9 并转到下一个 else if 语句。为什么会这样?为什么他们不评估为相同的值?如果在调试期间将光标悬停在每个值上,它们将显示它们具有相同的值,但由于某种原因,代码没有按照我的预期执行并将 9 分配给 i

有什么想法吗?

【问题讨论】:

  • 我很惊讶在这个网站上的搜索没有带来任何结果。这个问题过去已经被问过很多次了。
  • 也许在我问之前我在搜索时没有以正确的方式问它...... - 看到很多处理 CFString 并将其分配给 NSString 的问题,但没有很快看到凯文巴拉德下面回答。谢谢!

标签: objective-c cocoa cocoa-touch nsstring string-comparison


【解决方案1】:

这是指针的基本概念,你错过了。 (是的,myStringmySecondString 是指向字符串的指针)。

现在,if(mySecondString == myString) 将转到 TRUE,前提是两个指针都指向同一个位置。 (在大多数情况下他们不会这样做)

您应该使用if ([mySecondString isEqualToString:myString]),它将比较您的两个字符串的内容是否相等。

【讨论】:

    【解决方案2】:

    您不能使用“==”来比较两个字符串,这是用于 int 和其他值的。 您可以使用下面的代码来比较两个字符串

    if ([Firststring isEqualToString:Secondstring]) {

      NSLog(@"Hello this both string is same ");
    

    }

    【讨论】:

      【解决方案3】:

      您正在比较指向字符串的指针,而不是字符串本身。您需要将代码更改为

      if (if([mySecondString isEqualToString:myString]) {
          ....
      }
      

      【讨论】:

        【解决方案4】:

        你不能使用 '==' 来比较两个 NSString

        你应该使用 [NSString isEqualToString:(NSString*)] 来比较两个字符串

        【讨论】:

          【解决方案5】:

          您假设 C == 运算符执行字符串相等。它没有。它执行指针相等(在指针上调用时)。如果你想做一个真正的字符串相等性测试,你需要使用-isEqual: 方法(或者当你知道两个对象都是字符串时专门化-isEqualToString:):

          if ([mySecondString isEqualToString:myString]) {
              i = 9;
          }
          

          【讨论】:

            猜你喜欢
            • 2013-10-12
            • 2013-06-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多