在Dart中比较字符串的最佳方法是什么?String类不包含equals方法。是否推荐使用==?例如:
equals
==
String rubi = 'good'; String ore = 'good'; rubi == ore;
qnyhuwrf1#
是的,==是测试两个String是否相等的方法(只包含相同的字符序列)。代码的最后一行计算为true。
true
b5buobof2#
字符串是不可变的对象,这意味着你可以创建它们,但不能改变它们。你当然可以用其他字符串构建一个新的字符串,但一旦创建,字符串的内容就固定了。这是一种优化,因为具有相同顺序的相同字符的两个字符串可以是相同的对象。
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
dphi5xsq3#
与 Java 不同的是,Dart允许覆盖==等运算符。因此,您可以定义自己的测试来检查此运算符是否相等。您还可以使用indentical函数来检查两个引用是否指向同一个对象(相当于 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。在大多数情况下,您希望比较String的值而不是它们的引用,因此您应该使用==。
identical
sc4hvdpw4#
(For为了完整起见,这里有另一种比较两个字符串的方法。)Dart中的String实现了Comparable接口。您可以使用compareTo来比较字符串。
String
Comparable
compareTo
String rubi = 'good'; String ore = 'good'; rubi.compareTo(ore) == 0;
但是,您需要检查NULL值。
5gfr0r5j5#
有几种方法可以比较String。根据您的需要,您应该选择合适的解决方案:1.使用运算符str 1 == str 2:如果str 1等于str 2,则该运算符返回true。否则,它返回false。当您想要确定字符串是否具有相同的代码单元序列时,该运算符非常有用。1.使用**str1.compareTo(str 2)**方法:如果str 1的顺序在str 2之前,则该方法返回负值(-1),如果str 1的顺序在str 2之后,则返回正值(1),如果str 1和str 2相等,则返回零。如果要对字符串集合进行排序,则该方法很有用。
5条答案
按热度按时间qnyhuwrf1#
是的,
==
是测试两个String是否相等的方法(只包含相同的字符序列)。代码的最后一行计算为true
。b5buobof2#
字符串是不可变的对象,这意味着你可以创建它们,但不能改变它们。你当然可以用其他字符串构建一个新的字符串,但一旦创建,字符串的内容就固定了。
这是一种优化,因为具有相同顺序的相同字符的两个字符串可以是相同的对象。
dphi5xsq3#
与 Java 不同的是,Dart允许覆盖
==
等运算符。因此,您可以定义自己的测试来检查此运算符是否相等。您还可以使用indentical函数来检查两个引用是否指向同一个对象(相当于 Java 中对象上的==
)。对于String s,它有点特殊。根据您示例化String的方式,您可以使用DartVM获得不同的结果:
正如你所看到的,
identical
只在第一种情况下返回true
,而==
总是返回true
。但这并不总是正确的。如果你在 dart2js 编译后在javascript中运行这段代码,identical
和==
总是返回true
。在大多数情况下,您希望比较String的值而不是它们的引用,因此您应该使用
==
。sc4hvdpw4#
(For为了完整起见,这里有另一种比较两个字符串的方法。)
Dart中的
String
实现了Comparable
接口。您可以使用compareTo
来比较字符串。但是,您需要检查NULL值。
5gfr0r5j5#
有几种方法可以比较String。根据您的需要,您应该选择合适的解决方案:
1.使用运算符str 1 == str 2:如果str 1等于str 2,则该运算符返回true。否则,它返回false。当您想要确定字符串是否具有相同的代码单元序列时,该运算符非常有用。
1.使用**str1.compareTo(str 2)**方法:如果str 1的顺序在str 2之前,则该方法返回负值(-1),如果str 1的顺序在str 2之后,则返回正值(1),如果str 1和str 2相等,则返回零。如果要对字符串集合进行排序,则该方法很有用。