Dart String Comparator

Tia*_*ile 27 dart

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

例如:

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

rubi == ore;
Run Code Online (Sandbox Code Playgroud)

Dar*_*tle 42

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


Sof*_*ter 7

字符串是不可变的对象,这意味着您可以创建它们,但不能更改它们。您当然可以从其他字符串中构建一个新字符串,但是一旦创建,该字符串的内容就固定了。

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

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
Run Code Online (Sandbox Code Playgroud)

  • `===`已被内置函数`identical()`取代。 (4认同)

use*_*104 7

(为了完整起见,这是比较两个字符串的另一种方法。)

String在 Dart 中实现该Comparable接口。您可以用来compareTo比较字符串。

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

rubi.compareTo(ore) == 0;
Run Code Online (Sandbox Code Playgroud)

不过,您需要检查 NULL 值。


Ale*_*uin 5

Java不同,Dart允许重写诸如的运算符==。因此,您可以为此运算符定义自己的测试以检查是否相等。您还可以使用缩进功能来检查两个引用是否指向同一个对象(Java==on对象的等效项)。

对于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)}");
}
Run Code Online (Sandbox Code Playgroud)

如您所见,仅在第一种情况下始终identical返回。但这并不总是正确的。如果您在dart2js编译后在javascript中运行此代码,并始终返回。true==trueidentical==true

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