2013-04-27 3 views
8

Каков наилучший способ сравнить Strings in Dart? Класс String не содержит метода equals. Рекомендуется ли ==?Dart String Компаратор

Например:

String rubi = 'good'; 
String ore = 'good'; 

rubi == ore; 

ответ

8

Да, == это способ проверить, если две строки равны (содержат только ту же последовательность символов). Последняя строка вашего кода оценивается как true.

3

Строки являются неизменяемыми объектами, что означает, что вы можете их создать, но вы не можете их изменить. Вы можете, конечно, построить новую строку из других строк, но после ее создания содержимое строки будет исправлено.

Это оптимизация, поскольку две строки с одинаковыми символами в одном порядке могут быть одним и тем же объектом.

String rubi = 'good'; 
String ore = 'good'; 

print(rubi == ore); // true, contain the same characters 
print(identical(rubi, ore)); // true, are the same object in memory 
+2

'===' заменен на встроенную функцию 'same()'. –

+0

Спасибо. Я обновляю ответ. – SoftwareCarpenter

3

В отличие от Java, Dart позволяет переопределить операторы, такие как ==. Таким образом, вы можете определить свой собственный тест для этого оператора, чтобы проверить равенство. Вы также можете использовать indentical function для проверки наличия двух ссылок на один и тот же объект (эквивалент == на объектах в Java).

Для String s, это немного особенное. В зависимости от того, как вы в создании экземпляра String вы можете иметь различные результаты с DartVM:

main() { 
    final s = "test"; 

    printTests(s, "test"); 
    // displays '==' => true 'identical' => true 

    printTests(s, "$s"); 
    // displays '==' => true 'identical' => false 

    printTests(s, new String.fromCharCodes(s.codeUnits)); 
    // displays '==' => true 'identical' => false 
} 

printTests(String s1, String s2) { 
    print("'==' => ${s1 == s2} 'identical' => ${identical(s1, s2)}"); 
} 

Как вы можете видеть identical возвращается true только в первом случае и == всегда true. Но это не всегда так. Если вы запустите этот код в javascript после dart2js компиляция, identical и == всегда возвращаются true.

В большинстве случаев вы хотите сравнить значения String, а не их ссылки, поэтому вы должны использовать ==.

Смежные вопросы