Perché il codice sottostante stampa 2147483647, il valore effettivo è 2147483648?Domanda di base su Java int
i = (int)Math.pow(2,31) ;
System.out.println(i);
Capisco che il valore positivo massimo che un int può contenere è 2147483647. Poi perché un codice come questo auto avvolge il lato negativo e stampe -2147483648?
i = (int)Math.pow(2,31) +1 ;
System.out.println(i);
I è di tipo Integer. Se il secondo esempio di codice (aggiunta di due numeri interi) può avvolgere sul lato negativo se il risultato esce dal range positivo, perché il primo campione non può essere avvolto? Inoltre,
i = 2147483648 +1 ;
System.out.println(i);
che è molto simile al secondo esempio di codice tiri compilazione di errore che dice il primo letterale è fuori portata intero? La mia domanda è, come per il secondo esempio di codice, perché il primo e il terzo campione non possono eseguire il wrapping automatico dall'altra parte?
Per chiarimenti, questo non ha nulla a che fare con 'java.lang.Integer', che è diverso da' int'. – polygenelubricants
Come importa? Il problema (o la domanda) sarà lo stesso anche se scrivo il cast su (Integer) piuttosto che int. – chedine