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