2013-04-27 70 views
8

比较飞镖中字符串的最佳方法是什么? String类不包含equals方法。推荐使用==飞镖字符串比较器

例如:

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

'==='已被替换为内置函数'identical()'。 – 2013-04-27 19:21:44

+0

谢谢。我更新答案。 – SoftwareCarpenter 2013-04-27 19:44:11

3

不同于爪哇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。但事实并非如此。如果您在编译dart2js之后以javascript运行此代码,则identical==始终返回true

在大多数情况下,您想比较字符串的值而不是它们的引用,所以您应该使用==