Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    5

    [JAVA] dubbi tipi primitivi e non

    buongiorno a tutti
    mi sto cimentando nell'apprendere un po di programmazione in java e mi sono imbattuto in questo strano dubbio:
    codice:
    		public class confronto {
                            public static void main(String[] args) {
    			Integer o1=new Integer(10);
    			Integer o2=o1;
    			Integer o3=new Integer(10);
    			int p1=10;
    			int p2=p1;
    			int p3=10;
    			System.out.println("Confronto per ugualianza");
    			System.out.println("o1.equals(o2): "+o1.equals(o2));
    			System.out.println("o1.equals(o3): "+o1.equals(o3));
    			System.out.println("o1.equals(p2): "+o1.equals(p2));
    			System.out.println("o1.equals(p3): "+o1.equals(p3));
    			System.out.println();
    			System.out.println("Confronto per identità");
    			System.out.println("p1==p2: "+ (p1==p2));
    			System.out.println("p1==p3: "+ (p1==p3));
    			System.out.println("o1==o2: "+ (o1==o2));
    			System.out.println("o1==o3: "+ (o1==o3));
    			System.out.println("p1==o2: "+ (p1==o2));
    			System.out.println("p1==o3: "+ (p1==o3));
    		}
    
    	}
    ESECUZIONE;
    
    Confronto per ugualianza
    o1.equals(o2): true
    o1.equals(o3): true
    o1.equals(p2): true
    o1.equals(p3): true
    
    Confronto per identità
    p1==p2: true
    p1==p3: true
    o1==o2: true
    o1==o3: false
    p1==o2: true
    p1==o3: true
    Questo programma non ha alcuno scopo serve solo per vedere le differenze tra equals e ==....
    Ora viene il mio problema: perchè il confornto per identità di p1==o2 e p1==o3 danno risultato true? Il confronto per identità (==) non dovrebbe controllare se sono la stessa entità o no? se risulta true significa che sono la stessa cosa? l'unica soluzione che mi viene in mente è che se confronto un primitivo con un non primitivo == non guardi il riferimento ma il valore ma questa è solo una mia ipotesi...
    grazie delle risposte

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] dubbi tipi primitivi e non

    Originariamente inviato da Horokeu
    perchè il confornto per identità di p1==o2 e p1==o3 danno risultato true?
    p1 è un int (primitivo) mentre o2/o3 sono Integer (oggetti).
    Da Java 5 esiste la funzionalità di auto-boxing/unboxing. Pertanto i due Integer vengono unboxati in automatico a int. Alla fine si tratta di un confronto tra 2 int!

    Prima di Java 5, espressioni come p1==o2 non erano lecite.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    5
    grazie ora ho capito
    avevo sentito da qualche parte di questo unboxing ma non sapevo assolutamente cosa fosse ^^
    l'auto-boxing invece sai dove si usa o dove è utile?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Horokeu
    grazie ora ho capito
    avevo sentito da qualche parte di questo unboxing ma non sapevo assolutamente cosa fosse ^^
    l'auto-boxing invece sai dove si usa o dove è utile?
    Auto-boxing:
    Integer a = 10;

    (viene tradotto in Integer a = Integer.valueOf(10); )


    Auto-unboxing:
    Integer a = ......

    int b = a + 2;


    (viene tradotto in int b = a.intValue() + 2; )
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.