Если "a == b" имеет значение false при сравнении двух объектов NSString - PullRequest
6 голосов
/ 22 декабря 2011

У меня есть класс с доступным методом, который возвращает 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.

Есть мысли?

Ответы [ 5 ]

17 голосов
/ 22 декабря 2011

Вы предполагаете, что оператор C == выполняет равенство строк.Это не так.Это делает равенство указателей (при вызове указателей).Если вы хотите выполнить настоящий тест на равенство строк, вам нужно использовать метод -isEqual: (или специализацию -isEqualToString:, когда вы знаете, что оба объекта являются строками):

if ([mySecondString isEqualToString:myString]) {
    i = 9;
}
3 голосов
/ 22 декабря 2011

Вы сравниваете указатели со строками, а не с самими строками.Вам нужно изменить код на

if (if([mySecondString isEqualToString:myString]) {
    ....
}
2 голосов
/ 22 декабря 2011

вы не можете использовать '==' для сравнения двух NSString

Вы должны использовать [NSString isEqualToString: (NSString *)] для сравнения двух строк

1 голос
/ 29 марта 2013

Это базовая концепция указателя, вам не хватает.(ДА, myString и mySecondString - указатели на строку).

Теперь if(mySecondString == myString) перейдет на TRUE, только если оба указателя указывают на одно и то же место.(В большинстве случаев этого не будет)

Вы должны делать if ([mySecondString isEqualToString:myString]), который будет сравнивать содержимое обеих строк на равенство.

1 голос
/ 22 декабря 2011

Вы не можете сравнить две строки, используя "==", это для int и других значений.Вы можете использовать приведенный ниже код для сравнения двух строк

if ([Firststring isEqualToString: Secondstring]) {

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

}

...