Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    20

    Passaggio di stringhe a funzione

    Salve,
    mi è sorto un dubbio sulle stringhe!
    Il passaggio di un oggetto a una funzione avviene per riferimento (se nella funzione modifico l'oggetto, il chiamante lo trova modificato).

    Ovviamente questo non funziona se passo a una funzione una string, e lo sapevo !

    Se ho bisogno che una funzione modifichi una stringa passata come potrei fare?
    Non posso far ritornare una stringa perchè la funzione torna già un boolean

    Grazie

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

    Re: Passaggio di stringhe a funzione

    Originariamente inviato da Promo
    Il passaggio di un oggetto a una funzione avviene per riferimento (se nella funzione modifico l'oggetto, il chiamante lo trova modificato).
    Se l'oggetto è "mutabile" sì.

    Originariamente inviato da Promo
    Ovviamente questo non funziona se passo a una funzione una string, e lo sapevo
    Perché String (come anche Integer, Long, ecc...) è "immutabile".

    Originariamente inviato da Promo
    Se ho bisogno che una funzione modifichi una stringa passata come potrei fare?
    Non posso far ritornare una stringa perchè la funzione torna già un boolean
    Gli passi un oggetto di una TuaClasse "mutabile" che contiene una proprietà di tipo String. Il metodo cambia la stringa con un setQualcosa() sul tuo oggetto e tu poi la leggi con getQualcosa().

    Se non devi necessariamente usare String, potresti fare in modo che il metodo riceva un StringBuffer/StringBuilder (che sono mutabili).
    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 L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973

    Re: Passaggio di stringhe a funzione

    Originariamente inviato da Promo
    Salve,
    mi è sorto un dubbio sulle stringhe!
    Il passaggio di un oggetto a una funzione avviene per riferimento (se nella funzione modifico l'oggetto, il chiamante lo trova modificato).
    Esatto, è uno dei principi di Java. Tutti gli oggetti vengono passatti per riferimento.

    Originariamente inviato da Promo
    Ovviamente questo non funziona se passo a una funzione una string, e lo sapevo !
    Perché, come anche Andrea ha scritto, la classe String è immutabile, quindi non ti permette di cambiare i suoi dati.

    Originariamente inviato da Promo
    Se ho bisogno che una funzione modifichi una stringa passata come potrei fare?
    Non posso far ritornare una stringa perchè la funzione torna già un boolean

    Grazie
    Oppure lo puoi fare tramite un StringBuffer/StringBuilder, oppure una classe tua che contenga i dati che vuoi restituire oppure, se la logica te lo permetta, potresti cambiarla che quando restituisci una Stringa signifca true e quando invece ci metti null significa false.

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    20
    Grazie mille!
    Risolto

    Per chi lo volesse sapere ho fatto così:

    boolean func (StringBuffer strBuffExplain)
    {
    //elaborazioni varie
    strBuffExplain.append ("Ciao");

    return true; //o false
    }

    Chiamata con:
    StringBuffer strBuff = new StringBuffer();
    boolean l_bRes = func (strBuff);
    System.out.println (strBuff);

    Alla prossima

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    20
    Scusate,
    se volessi passare un int o float o un dato primitivo in genere a una funzione e vorrei che la funzione lo cambiasse come posso fare? (cioè passato per riferimento anche se i dati primitivi son passati per valore)

    Ho visto che le classi wrapper Integer, Long non mi permettono di modificare il contenuto (non ho trovato nessun metodo che mi permetta di fare ciò!)

    Un altra domanda! In C++ è possibile passare per esempio a una funzione un parametro const (cioè non è possibile cambiare il suo contenuto)!

    In Java (che ho cominciato a studiare on the road per realizzare un progetto) ho visto che si può passare a una funzione un oggetto final! Ma questo mi permette di NON cambiare il suo riferimento ma non mi permette di rendere i membri di questo oggetto costanti!
    Cioè in codice:

    codice:
    void func(final myObject obj) 
    { 
       // obj =  new myObject(); // Illegale -- obj è final 
       obj.modify (5); //ma è possibile modificare il suo contenuto
    }
    Ho detto qualche cavolata o ho detto cose giuste?
    Come potrei fare a passare un oggetto a una funzione in modo tale che la funzione non modifichi il suo contenuto?

    Grazie mille

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Promo
    se volessi passare un int o float o un dato primitivo in genere a una funzione e vorrei che la funzione lo cambiasse come posso fare? (cioè passato per riferimento anche se i dati primitivi son passati per valore)
    L'ho detto prima:

    "Gli passi un oggetto di una TuaClasse "mutabile" che contiene una proprietà di tipo XYZ". E XYZ può essere quello che ti pare ...

    Originariamente inviato da Promo
    Come potrei fare a passare un oggetto a una funzione in modo tale che la funzione non modifichi il suo contenuto?
    In generale no, non puoi. Ma la questione è posta male. Nel senso che se invochi un metodo che riceve un oggetto, tu devi "sapere" a) se l'oggetto è "mutabile" e b) se il metodo (supponendo la "mutabilità" dell'oggetto) va a modificare lo "stato" dell'oggetto.

    Se un metodo riceve un oggetto mutabile e ne modifica lo stato (sempre o a certe condizioni) e questo tu non lo vuoi allora ..... o cloni l'oggetto e quindi passi al metodo una copia (il metodo non lo "sa" ... modifica la copia ma tanto ... non importa) oppure cambi la implementazione del metodo oppure non usi quel metodo o ne usi un altro. Punto.
    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.