簡體   English   中英

文字比較和變量比較有什么區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM