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
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.