Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Uguaglianza di riferimento vs equals

    Buondi a tutti...
    Ho da poco iniziato a programmare in Java e subito mi sono imbattuto in un dubbio che non mi riesce di risolvere!!!

    Questo e il codice:
    codice:
            Integer a = new Integer(1);
            Integer b = new Integer(1);
            System.out.println("a == b ? " + (a == b));
            System.out.println("a.equals(b) ? " + (a.equals(b)));
            //-----------------------------------------
            Integer c = 1;
            Integer d = 1;
            System.out.println("c == d ? " + (c == d)); //Restituisce 'True' su due oggetti distinti???
            System.out.println("c.equals(d) ? " + (c.equals(d)));
    mentre questo e il risultato:
    codice:
            a == b ? false
            a.equals(b) ? true
            c == d ? true
            c.equals(d) ? true
    Ecco la domanda: come mai, nel caso 'c==d' viene restituito true anche se, i due oggetti sono completamente diversi??? Grazie di un eventuale risposta! :d

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Perché nel primo caso tu hai allocato gli oggetti usando new (anche se poi usi lo stesso valore) e la jvm istanzierà per te due oggetti differenti.

    Nel secondo caso, tu stai inizializzando c alla costante numerica 1. Lo stesso vale per d. la jvm in questo caso capisce che ti stai riferendo allo stesso oggetto, vede che è una costante numerica e ottimizza creandone una sola (quindi usando un solo riferimento).

    Questa è una delle ragioni per cui per il confronto, a meno di usare tipi primitivi, è sempre meglio passare per l'equals!
    RTFM Read That F*** Manual!!!

  3. #3
    Adesso mi e tutto un po piu chiaro! Grazie! :d

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.