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

    [Java] Internare una stringa...

    Ciao a tutti
    A cosa serve il metodo intern() di Java? ho letto che serve per il confronto tra stringhe, ma a cosa di preciso?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    il metodo intern() è della classe String. Serve per poter effettuare il confronto fra due stringhe tramite l'operatore classico ==. Restituisce la rappresentazione stringa in forma canonica dell'oggetto String su cui è chiamato.
    In definitiva, è molto simile al metodo equals():

    codice:
    String a = "Ciao, sono LeleFT";
    String b = "Ciao, sono LeleFT";
    
    if (a == b) {
       // Non verrà eseguita questa parte perchè a e b sono due oggetti diversi
    } else {
       // Verrà eseguita questa parte
    }
    
    if (a.equals(b)) {
       // Questa parte verrà eseguita
    }
    
    if (a.intern() == b.intern()) {
       // Anche questa parte verrà eseguita: proprio perchè a.equals(b) è TRUE
    }
    Io, comunque, userei sempre il metodo equals() visto che è un metodo di tutti gli Object.

    Spero di essere stato chiaro.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    intanto grazie per la risposta

    quello che mi sfugge.. a che serve allora chiamare intern()? :master:
    sapevo che con "==" si confrontano gli oggetti e con equals() i valori delle due stringhe..
    ma allora che differenza passa tra intern() e equals()?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    C'è una differenza di fondo.

    Con l'operatore == si confrontano gli oggetto nel senso che viene effettuato un confronto sui puntatori (che non vengono usati dal programmatore Java, ma ovviamente da Java sì). Cosa significa questo? Un esempio per comprendere:

    Io dichiaro due oggetti di tipo String:

    String a = "Ciao, sono LeleFT";
    String b = "Ciao, sono LeleFT";

    L'oggetto 'a' risiede in una certa locazione di memoria (supponiamo all'indirizzo 100). L'oggetto 'b' risiede in un'altra locazione di memoria (supponiamo all'indirizzo 125).
    Ora, quando io scrivo:
    codice:
    if (a==b) {
       // test se vero
    }
    cosa fa Java? Semplice: confronta l'indirizzo di 'a' con quello di 'b' e ciò ovviamente falsifica il test (100 != 125).

    Utilizzando il metodo equals, invece, Java si comporta differentemente: controlla, infatti, se tutte le proprietà dell'oggetto 'a' sono uguali a tutte le proprietà dell'oggetto 'b' (che è in fondo quello che noi programmatori vogliamo: per noi, due oggetti sono uguali se coincidono nelle loro proprietà).
    Il metodo intern non fa altro che restituire la proprietà interna all'oggetto String (la stringa standard: il contenuto, se vogliamo). In questo modo con l'operatore == vengono confrontate DUE PROPRIETA' di due oggetti e non due oggetti.

    Sia chiaro che usare il metodo equals() significa confrontare TUTTE LE PROPRIETA' di entrambi gli oggetti, mentre con il metodo intern (e l'operatore == ) vengono confrontate solamente DUE proprietà (ma a noi programmatori è sufficiente, perchè per noi una stringa è un insieme di caratteri alfanumerici e niente di più).

    Spero di essere stato più chiaro possibile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    grazie ancora per la risposta.
    Puoi rispondermi a quest'altra domanda cosi verifico se ho capito?

    String a = "ciao mondo";
    String b = "ciao mondo";

    pacifico che a==b restituisce false perchè sono due oggetti diversi.

    intern restituisce true se i due valori, "ciao mondo" e "ciao mondo" sono uguali.
    equals restituisce true se non solo i due valori, ma tutte le altre proprietà dei due oggetti String sono uguali?

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    intern() non restituisce un booleano ma una stringa.

    a.equals(b) restituisce true se e solo se a e b sono non nulli ed entrambi rappresentano la stessa sequenza di caratteri.
    Tra laltro (s.intern() == t.intern()) è true se e solo se (s.equals(t)) è true (sono due espressioni equivalenti).

    Il metodo intern() puo essere usato per ricavare un oggetto stringa unico che rappresenta tutte le stringhe "con gli stessi caratteri".

    Ciao

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 © 2024 vBulletin Solutions, Inc. All rights reserved.