Poniższe program wypisuje odpowiednio „false” i „true”:Niechciane autoboxing magia na liczbach
Number n = true ? new Long(1) : new Double(2.0);
System.out.println(n instanceof Long);
System.out.println(n instanceof Double);
Więc to nie będzie długi, ale dwukrotnie. Jednak to działa zgodnie z przeznaczeniem na normalnych zajęć: Mając
class B {}
class D1 extends B {}
class D2 extends B {}
to wypisze „true”:
B b = true ? new D1() : new D2();
System.out.println(b instanceof D1);
co oznacza, że nie działa tak samo jak w powyższym przykładzie.
Jestem pewien, że jest coś związanego z autoboxingiem, ale czy tak naprawdę to powinno działać? Dlaczego używa boksowania, gdy klasa Liczba jest nadklasą zarówno długich, jak i podwójnych, tak aby wyrażenie mogło być ocenione jako liczba?
To naprawdę ból, ponieważ podczas drukowania n, drukuje jako podwójna wartość. (Wiem, że to jest łatwe do obejścia, ale zawiózł mnie do szału)
Opcja ':' zajmuje typ ostatniego wyrażenia. Jeśli zrobiłeś 'null' byłoby to' Long': P. –
Nie, nie przyjmuje typu ostatniego wyrażenia, wystarczy spojrzeć na drugi przykład. Oczywiście kod jest tylko przykładem, ale wyobraź sobie, że istnieje coś prawdziwego, boolowskiego, gdzie teraz "prawdziwy" stoi w trendzie. – poroszd
Dlaczego bliskie głosy? To wygląda mi na cholernie dobre pytanie. –