Dart String Comparator

时间:2013-04-27 18:40:46

标签: dart

在Dart中比较弦乐的最佳方法是什么? String类不包含equals方法。是==推荐吗?

例如:

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

rubi == ore;

5 个答案:

答案 0 :(得分:25)

是的,==是测试两个字符串是否相等的方法(仅包含相同的字符序列)。代码的最后一行评估为true

答案 1 :(得分:5)

字符串是不可变对象,这意味着您可以创建它们,但不能更改它们。你当然可以用其他字符串构建一个新的字符串,但是一旦创建,字符串的内容就会被修复。

这是一种优化,因为具有相同顺序的相同字符的两个字符串可以是同一个对象。

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 :(得分:5)

Java 不同,Dart允许覆盖==等运算符。因此,您可以为此运算符定义自己的测试以检查相等性。您还可以使用indentical function检查两个引用是否属于同一对象(相当于 Java 中对象的==)。

String来说,它有点特别。根据您实例化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。但这并非总是如此。如果您在 dart2js 编译后在javascript中运行此代码,则identical==始终返回true

在大多数情况下,您希望比较String的值而不是它们的引用,因此您应该使用==

答案 3 :(得分:0)

(出于完整性考虑,这是比较两个字符串的另一种方法。)

Dart中的

String实现了Comparable接口。您可以使用compareTo比较字符串。

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

rubi.compareTo(ore) == 0;

不过,您需要检查NULL值。

答案 4 :(得分:0)

有几种比较String的方法。根据您的需要,您应该选择合适的解决方案:

  1. 使用运算符 str1 == str2:如果 str1 等于 str2,则运算符返回 true。否则,它返回 false。 当您要确定字符串是否具有相同的代码单元序列时,此运算符很有用。
  2. 使用 str1.compareTo(str2) 方法:如果 str1 在 str2 之前排序,则该方法返回负值 (-1),如果 str1 在 str2 之后排序,则返回正值 (1),或如果 str1 和 str2 相等,则为零。 如果您想对字符串集合进行排序,此方法很有用。