[英]What is difference between literal comparison and variable comparison
有什么區別
Float f1 = 120.0f;
Float f2 = 120.00f;
if(f1==120.00f)
{
System.out.println("Equal");
}
else
System.out.println("Not Equal");
在這里我得到Equal作為輸出和
if(f1==f2)
{
System.out.println("Equal");
}
else
System.out.println("Not Equal");
在這里,我的輸出不平等。 文字比較和變量比較有什么區別
你稱之為“變量比較”的東西就是變量值的比較。 在您的情況下,您的變量是對象,因此您正在比較它們的引用 ,即內存中對象的地址。 對於兩個不同的對象,該地址也將不同。
在第一個實例中,java將f1與實際數字120.00f進行比較。 在第二個實例中,java正在比較內存引用。 即使f1和f2保持相同的值,它們也存儲在存儲器中的不同位置,因此彼此完全分離。 因此,當您鍵入if(f1 == f2)時,java會檢查數據中存儲在f1的信息,並檢查f2是否指向此完全相同的信息位。
不同之處在於數據類型。
在第一個示例中,您將Float
類的實例與原始float
。 在這種情況下, Float
對象被取消裝箱以獲得另一個原始float
,並對這兩個進行比較。 當使用帶有兩個基元的==
,它會比較它們的值,這就是為什么它說它們是相等的(因為它們是)。
在第二個例子中,你要比較的類的實例Float
與另一個類的實例Float
。 在這種情況下,不會發生這樣的轉換,當使用帶有兩個對象的==
,它會比較它們的引用,看它們是否是完全相同的對象 。 它說它們不相等,因為它們不是 - 它們是兩個不同的對象,它們碰巧具有相同的價值。
這是自動拳擊的副作用。 你的說法Float f1 = 120.0f;
但是編譯器使它成為Float f1 = new Float(120.0f);
現在進行比較
(f1 == 120.00f)將f1更改為浮點數(不確定原因,但這就是它發生的情況。其中f1 == f2是對象比較,因為它們引用不同的對象而失敗。請參閱此代碼:
public static void main(String[] args) {
Float f1 = new Float(120.0f);
Float f2 = new Float(120.00f);
System.out.println("f1 " + f1.floatValue() + ", f2 " + f2.floatValue());
System.out.println("f1 val == f2 val :" + (f1.floatValue() == f2.floatValue()));
if(f1==120.00f)
{
System.out.println("Equal");
}
else
System.out.println("Not Equal");
if(f1==f2)
{
System.out.println("Equal");
}
else
System.out.println("Not Equal");
if(120f==f2)
{
System.out.println("Equal");
}
else
System.out.println("Not Equal");
}
得到
f1 120.0,
f2 120.0
f1 val == f2 val:true
等於
不平等
等於
使用java.lang.Float.compare(float1,float2)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.