C 中值型別的Equls方法

2022-01-11 18:47:37 字數 565 閱讀 2793

今天遇到double.equals(0.0,0)返回false的問題,根據實際判斷,使用0.0 == 0 才能正確的返回true,是否c#所有型別的equals方法都是引用的比較,對於本身不是引用型別的值型別資料,如何判斷引用呢,或者是有其他的原因,後面有時間搜尋下。

view code

double dblproduct = 0

;if(double.equals(dblproduct,0)) //

false

if(dblproduct == 0) //

true

補充1:**中存在幾個問題,猜測原因如下:

1.double型別的比較問題,double型別和int型別進行比較時,編譯器進行了隱式的轉換,使得未報編譯錯誤。但equals時報不等,那==又是轉換為什麼型別比較的呢;

2.**在vs2010環境中dblgaprate返回值為-infinity,以前應該有個期望的dividebyzeroexception,難道是優化的結果?

3.dblproduct.tostring()的結果為「0」,在監視中檢視的為「0.0」,有何不同?

「 「與equls方法的區別詳解

既能比較基本資料型別,也能比較引用資料型別。equals方法是對於引用資料型別而言,比較的是物件的內容 public boolean equals object obj 當我們的建立的類,要比較兩個物件的例項是否相等,要重寫equals方法和hashcode方法。equals方法裡就是我們判斷兩個物...

C 中值型別和引用型別

概念 1.值型別 資料儲存在記憶體的堆疊中,從堆疊中可以快速地訪問這些資料,因此,值型別表示實際的資料。2.引用型別 表示指向儲存在記憶體堆中的資料的指標或引用 包括類 介面 陣列和字串 c 中定義的值型別包括原型別 sbyte byte short ushort int uint long ulo...

c 中值型別和引用型別

在c 中有兩種型別的資料,一種是值型別資料,一種是引用型別資料。在編碼的時候區分這兩種型別資料,可以避免一些細小的編碼錯誤。首先說說什麼型別是值型別,例如 int float bool之類的基礎型別,以及用struct定義的型別,如 datetime。除此外,如string,陣列,以及用class定...