[英]What is the difference between == and === in Dart?
Dart 支持 == 和 === 嗎? 平等和身份有什么區別?
Dart 支持==
表示相等, identical(a, b)
表示相同。 Dart 不再支持===
語法。
當你想檢查對象是否“相等”時,使用==
表示相等。 您可以在您的類中實現==
方法來定義相等的含義。 例如:
class Person {
String ssn;
String name;
Person(this.ssn, this.name);
// Define that two persons are equal if their SSNs are equal
bool operator ==(other) {
return (other is Person && other.ssn == ssn);
}
}
main() {
var bob = Person('111', 'Bob');
var robert = Person('111', 'Robert');
print(bob == robert); // true
print(identical(bob, robert)); // false, because these are two different instances
}
注意a == b
的語義是:
a
或b
為null
,則返回identical(a, b)
a.==(b)
使用identical(a, b)
檢查兩個變量是否引用同一個實例。 identical是dart:core
中的頂級函數。
應該注意的是,在 dart 中使用identical
的函數有一些注意事項,正如這個 github 問題評論所提到的:
規范已更新為像這樣對待雙打之間的相同:
identical() 函數是預定義的 dart 函數,如果它的兩個參數是:
- 同一個對象。
- 類型為 int 且具有相同的數值。
- double 類型,不是 NaN,並且具有相同的數值。
這意味着即使 dart 中的所有內容都是對象,並且f
和g
是不同的對象,但以下內容會打印true
。
int f = 99;
int g = 99;
print(identical(f, g));
因為 int 的值相同,而不是引用。
因此,為了回答您的問題, ==
用於標識兩個對象是否具有相同的值,但identical
用於測試引用相等性,除了上面摘錄所標識的double
和int
的情況。
請參閱: 相等和關系運算符
由於據說 DART 與存在 === 的 javascript 相關,我希望不要很快被否決。
身份作為一個概念意味着 1 等於 1,但 1.0 不等於 1,false 也不等於 0,“2”也不等於 2,即使它們相互求值並且 1==1.0 返回 true。
應該注意的是,在 Dart 中, identical
的工作方式類似於 Javascript,其中(5.0 == 5)
是true
,但identical(5.0, 5)
是false
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.