在 Dart 中比较字符串的最佳方法是什么?String 类不包含equals方法。==推荐吗?
例如:
String rubi = 'good';
String ore = 'good';
rubi == ore;
在 Dart 中比较字符串的最佳方法是什么?String 类不包含equals方法。==推荐吗?
例如:
String rubi = 'good';
String ore = 'good';
rubi == ore;
是的,==是测试两个字符串是否相等(仅包含相同的字符序列)的方法。代码的最后一行计算为true.
字符串是不可变的对象,这意味着您可以创建它们但不能更改它们。您当然可以用其他字符串构建一个新字符串,但是一旦创建,字符串的内容就固定了。
这是一种优化,因为具有相同字符且顺序相同的两个字符串可以是同一个对象。
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
与Java不同,Dart允许覆盖诸如==. 因此,您可以为此运算符定义自己的测试来检查相等性。您还可以使用indentical 函数来检查两个引用是否指向同一个对象(相当于Java==中的on 对象)。
对于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 的值而不是它们的引用,因此您应该使用==.
(为了完整起见,这是比较两个字符串的另一种方法。)
String在 Dart 中实现了Comparable接口。您可以compareTo用来比较字符串。
String rubi = 'good';
String ore = 'good';
rubi.compareTo(ore) == 0;
不过,您需要检查 NULL 值。
有几种比较字符串的方法。根据您的需要,您应该选择合适的解决方案: