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

    Metodo substring..qualcuno capisce perchè..

    Io ho scritto questo codice:
    public static void main(String[] args) {
    String str;
    String str2;
    str =new String();
    str2 =new String();

    str="pincop";
    str2=str.substring(0, str.length()-1); /*toglie la p*/

    System.out.println(str2); /*stampa pinco*/
    if (str2=="pinco")
    System.out.println("ok");
    }

    }

    Qualcuno sa dirmi perchè quando confronto str2(che è pinco) con la stringa "pinco", non me le riconosce come uguali?
    Grazie

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

    Re: Metodo substring..qualcuno capisce perchè..

    Originariamente inviato da Paoletta_r
    Io ho scritto questo codice:
    public static void main(String[] args) {
    String str;
    String str2;
    str =new String();
    str2 =new String();

    str="pincop";
    str2=str.substring(0, str.length()-1); /*toglie la p*/

    System.out.println(str2); /*stampa pinco*/
    if (str2=="pinco")
    System.out.println("ok");
    }

    }

    Qualcuno sa dirmi perchè quando confronto str2(che è pinco) con la stringa "pinco", non me le riconosce come uguali?
    Grazie
    Prima di tutto non ha senso fare:
    str =new String();

    e poi dopo:
    str="pincop";

    All'inizio crei un oggetto String che contiene una stringa vuota e assegni il reference alla variabile str, poi assegni a str un reference ad un altro oggetto String ("pincop"). Il primo oggetto non lo usi, e va a finire al garbage-collector. Insomma ... è un oggetto inutile.

    Come seconda cosa: Le variabili di tipo reference contengono un riferimento all'oggetto. Usando == per il confronto, tu stai confrontando i due reference, non il contenuto degli oggetti.
    Dal momento che a str2 viene assegnato un reference ad una stringa generata a run-time (dal substring), str2 non avrà mai lo stesso reference della stringa letterale "pinco", anche se le due stringhe hanno lo stesso contenuto.
    Devi usare il metodo equals() di String.

    if (str2.equals ("pinco"))
    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
    Feb 2007
    Messaggi
    71
    Mi sembra che ci sia una differenza nella dichiarazione di un oggetto String nei due modi:
    a) String stringa = "a";
    b) String stringa = new String("a");

    Nel metodo a come ti diceva andbin "punta" (alla fine è sempre un puntatore) alla stringa "a" e quindi se fai stringa == "a" ritorna false e devi utilizzare il metodo equals(); nel metodo b invece mi sembra (nel senso che mi è stato detto ma non l'ho mai verificato) che ritorni true anche con ==.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da hoyer
    Mi sembra che ci sia una differenza nella dichiarazione di un oggetto String nei due modi:
    a) String stringa = "a";
    b) String stringa = new String("a");
    In entrambi i casi la stringa literal "a" viene messa nel "String constant-pool", nel secondo caso viene creato nel heap un ulteriore oggetto String.

    Originariamente inviato da hoyer
    nel metodo b invece mi sembra (nel senso che mi è stato detto ma non l'ho mai verificato) che ritorni true anche con ==.
    No, se una stringa è generata a runtime (ad esempio con un substring) non può in alcun modo avere lo stesso reference di altri oggetti, quindi == non può mai funzionare.
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.