Perché autoboxing / unboxing in mancanza di qui?
-
22-10-2019 - |
Domanda
Nel programma qui di seguito, il risultato è che 0.0
è considerato meno di Double.MIN_VALUE
. Perché?
Abbiamo una soluzione (lavoro con Doubles
solo ed uso compareTo
) e voglio capire perché sta fallendo unboxing qui.
import java.util.Date;
import java.util.Calendar;
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
double max = 99999.9999;
double min = Double.MIN_VALUE;
Double test = 0.0;
System.out.println(max > test); // expect true; is true
System.out.println(test > min); // expect true; is false
}
}
Soluzione
Secondo il Javadocs :
MIN_VALUE
Una costante che tiene il più piccolo valore diverso da zero positivo di tipo double, 2 -1074 .
In altre parole, è più grande di 0.
Altri suggerimenti
Si dovrebbe leggere il Double.MIN_VALUE specifica. Si tratta di un minimo possibile, ma valore Double positiva che significa che è più grande di 0.0.
A constant holding the smallest positive nonzero value of type double, 2-1074.
It is equal to the hexadecimal floating-point literal 0x0.0000000000001P-1022
and also equal to Double.longBitsToDouble(0x1L).
Double.MIN_VALUE = 4.9E-324
che è ancora un numero positivo. Penso che si sta cercando min = - Double.MAX_VALUE
Secondo me autoboxing non ha problemi.
Forse è sufficiente usare qualcosa come Double.NEGATIVE_INFINITY o Double.POSITIVE_INFINITY che dovrebbe funzionare bene con i
-Double.MAX_VALUE > Double.NEGATIVE_INFINITYè vero!