在Dart中比较弦乐的最佳方法是什么?String类不包含equals
方法.被==
推荐的?
例如:
String rubi = 'good';
String ore = 'good';
rubi == ore;
Run Code Online (Sandbox Code Playgroud)
字符串是不可变的对象,这意味着您可以创建它们,但不能更改它们。您当然可以从其他字符串中构建一个新字符串,但是一旦创建,该字符串的内容就固定了。
这是一种优化,因为以相同顺序具有相同字符的两个字符串可以是同一对象。
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)
(为了完整起见,这是比较两个字符串的另一种方法。)
String
在 Dart 中实现该Comparable
接口。您可以用来compareTo
比较字符串。
String rubi = 'good';
String ore = 'good';
rubi.compareTo(ore) == 0;
Run Code Online (Sandbox Code Playgroud)
不过,您需要检查 NULL 值。
与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
==
true
identical
==
true
在大多数情况下,您想比较String的值而不是它们的引用,因此应使用==
。
归档时间: |
|
查看次数: |
16362 次 |
最近记录: |