2013-04-27 8 views
8

ダーツの文字列を比較する最良の方法は何ですか? Stringクラスにはequalsメソッドが含まれていません。 ==はお勧めですか?例えばダーツ文字列比較器

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

rubi == ore; 

答えて

8

はい、==は、2つの文字列が等しいかどうかをテストするための方法である(排他的に文字の同じ配列を含みます)。コードの最後の行はtrueと評価されます。

3

文字列は不変オブジェクトです。つまり、作成することはできますが、変更することはできません。もちろん、他の文字列から新しい文字列を作成することはできますが、作成した文字列の内容は固定されています。

同じ順序で同じ文字を持つ2つの文字列が同じオブジェクトになる可能性があるため、これは最適化です。

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()'に置き換えられました。 –

+0

ありがとうございます。私は答えを更新する。 – SoftwareCarpenter

3

異なりジャワDartは、==として演算子をオーバーライドすることを可能にします。したがって、この演算子が等価性をチェックするための独自のテストを定義することができます。 indentical functionを使用して、2つの参照が同じオブジェクト(のオブジェクトの==相当、Java)にあるかどうかを確認することもできます。

Stringについては、少し特殊です。あなたがidenticalリターンを見ることができるようにtrueのみ最初のケースと常に==trueため

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)}"); 
} 

:あなたがインスタンス化する方法に応じてStringあなたはDartVMと異なる結果を持つことができます。しかし、それは常に真実ではありません。 dart2jsコンパイル後にこのコードをjavascriptで実行すると、identical==は常にtrueを返します。

ほとんどの場合、==を使用する必要があるため、Stringの値を比較する必要はありません。