比较飞镖中字符串的最佳方法是什么? String类不包含equals
方法。推荐使用==
?飞镖字符串比较器
例如:
String rubi = 'good';
String ore = 'good';
rubi == ore;
比较飞镖中字符串的最佳方法是什么? 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
不同于爪哇,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
。
在大多数情况下,您想比较字符串的值而不是它们的引用,所以您应该使用==
。
'==='已被替换为内置函数'identical()'。 – 2013-04-27 19:21:44
谢谢。我更新答案。 – SoftwareCarpenter 2013-04-27 19:44:11