SORU
17 EYLÜL 2015, PERŞEMBE


Neden int-Nesne bir karşılaştırma geçerli Java 7, ama Java 8'de değil mi?

Aşağıdaki kodu

private boolean compare(Object a, int b) {
    return a == b;
}

Java 8: aşağıdaki hata Java 7, ama sonuçlar derler

eşsiz tipleri: int ve Nesne

Aşağıdaki soru bakarak:

Comparing Object and int in Java 7

Java 6 gibi görünüyor ve Java 8 7 yok iken int Object, karşılaştırmak izin vermeyin. Bu herhangi bir belge var mı?

Bu kararlar bilgi arka plan bilgi ilgileniyorum. Kararsız kaldılar gibi görünüyor.

GÖRDÜM 1.7.0.51 IntelliJ IDEA 14.1.4 kullanıyorum.

CEVAP
17 EYLÜL 2015, PERŞEMBE


Java 7 int autoboxing geçerlidir.

 private boolean compare(java.lang.Object, int);
   Code:
      0: aload_1
      1: iload_2
      2: invokestatic  #2       // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      5: if_acmpne     12
      8: iconst_1
      9: goto          13
     12: iconst_0
     13: ireturn

build 1.7.0_71-b14 bunu ben yarattım

DÜZENLEME:

Bu davranış ve Oracle tarafından hata olarak kabul tedavi edildi:
JDK-8013357: Javac hatalı ikili karşılaştırma işlemleri kabul eder

İlgili İDEA bölüm 15.21. Javac olarak bu tedavi gibi görünüyor başvuru karşılaştırması, ama referans bir karşılaştırma sadece izin verildiğinde Her İKİ işlenen de referans türleridir.
...
İDEA ikili karşılaştırmalar Bölüm 15.21 için tür kurallar olacak doğru javac yürütür. BeriJDK5bazı kabul etti javac hatalı yazılan Nesne-ilkel karşılaştırmalar ile programlar İDEA 15.21 göre. Bu karşılaştırmaları artık doğru olacaktır tip hatalar olduğu tespit edildi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • B4ROK

    B4ROK

    1 EKİM 2008
  • DJAndrewRyan

    DJAndrewRyan

    22 Ocak 2007

İLGİLİ SORU / CEVAPLAR