java - wallis - test di wilcoxon esempio




Test di uguaglianza Java Wrapper (4)

  public class WrapperTest {

    public static void main(String[] args) {

        Integer i = 100;
        Integer j = 100;

        if(i == j)
            System.out.println("same");
        else
            System.out.println("not same");
    }

   }

Il codice precedente fornisce l'output dello same quando viene eseguito, tuttavia se cambiamo il valore di i e j a 1000 l'output cambia in not same . Mentre mi sto preparando per SCJP, ho bisogno di chiarire questo concetto. Qualcuno può spiegare questo comportamento. Grazie.


Il tuo codice non viene compilato. Questo è quello che ottengo:

Eccezione nel thread "main" java.lang.Error: Problemi di compilazione non risolti: Tipo mismatch: impossibile convertire da int a Integer Tipo mismatch: impossibile convertire da int a Integer

at WrapperTest.main(WrapperTest.java:5)

Le variabili i e j sono istanze di oggetto intero. Non confrontare istanze di oggetti usando l'operatore "==", utilizzare invece il metodo "equals".

Saluti


Fondamentalmente i numeri interi tra -127 e 127 sono "memorizzati nella cache" in modo tale che quando si utilizzano quei numeri si fa sempre riferimento allo stesso numero in memoria, motivo per cui il vostro == funziona.

Qualsiasi numero intero al di fuori di tale intervallo non viene memorizzato nella cache, quindi i riferimenti non sono gli stessi.



@ tunaranch è corretto. È anche lo stesso problema di questa domanda Python . L'essenza è che Java mantiene un oggetto intorno agli interi da -128 a 127 (Python fa -5 a 256) e restituisce lo stesso oggetto ogni volta che ne chiedi uno. Se chiedi un numero intero al di fuori di questo intervallo fisso, ti darà ogni volta un nuovo oggetto.

(Ricorda che == restituisce se due oggetti sono effettivamente gli stessi, mentre equals confronta i loro contenuti.)

Modifica : ecco il paragrafo pertinente dalla Sezione 5.1.7 della Specifica del linguaggio Java :

Se il valore p in box è true , false , un byte , un char nell'intervallo da \u0000 a \u007f o un numero int o short compreso tra -128 e 127, allora r1 e r2 saranno i risultati di due conversioni di boxing di p. È sempre il caso che r1 == r2 .

Nota che questo descrive anche cosa succede con altri tipi.





wrapper