import 'dart:core';
void main() {
String characters = 'World';
String a = 'Hello $characters';
String b = 'Hello $characters';
print(a == b);
等式運算子的輸出為真
double x = 3.5;
double y = 3.5;
print(identical(x, y));
print(identical(a, b));
在 dartpad 中輸出 true 但在 VS code 中輸出 false
List eq3 = const [1, 2, 3];
List eq4 = [1, 2, 3];
print(eq3 == eq4);
print(identical(eq3, eq4));
}
uj5u.com熱心網友回復:
檔案說“默認運算子 == 實作僅在物件相同時才認為物件相等”,為什么不在這里應用它?
您提供了多個案例,因此不清楚您有哪些與現實不同的具體期望。
String characters = 'World'; String a = 'Hello $characters'; String b = 'Hello $characters'; print(a == b);等式運算子的輸出為真
a == b是真的,因為String不使用默認 operator ==實作。 String提供它自己的 override。
double x = 3.5; double y = 3.5; print(identical(x, y)); print(identical(a, b));在 dartpad 中輸出 true 但在 VS code 中輸出 false
目前尚不清楚您正在觀察什么輸出。 identical(x, y)在兩種環境中都應該為真:x并且y都從相同的double文字初始化。
identical(a, b)當作為實作細節轉換為 JavaScript 時回傳 true 。在這種情況下,DartString由 JavaScript 字串支持,并且許多 JavaScript 實作都執行字串實習。
identical(a, b) false在通過 Dart VM 運行時可能會回傳,因為它可以生成單獨的String物件。但是,true如果您編譯執行更多優化的發布模式二進制檔案,它也可能會回傳。
最終,identical(a, b)在您的示例中是否回傳 true 是您不應該依賴的實作細節。
List eq3 = const [1, 2, 3]; List eq4 = [1, 2, 3]; print(eq3 == eq4); print(identical(eq3, eq4));
你沒有說你觀察到什么輸出(也沒有你期望什么)。在這種情況下,List也不會覆寫默認Object.operator ==。因此,==并且identical將表現得完全相同。雙方==并identical會回傳false,因為你一定有兩個不同的List物件。
uj5u.com熱心網友回復:
== 運算子測驗兩個物件是否相等。如果兩個字串包含相同的代碼單元序列,則它們是等效的。見這里。
編輯:您可以回顧一下關于您的第三個代碼片段的這個答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/374030.html
