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

    [Java] String e StringBuffer

    Ciao, sto cercando di capire il funzionamento delle stringhe...

    Il mi libro dice che le stringhe sono oggetti immutabili, che una volta creati non possono più essere modificati. Gli stringBuffer invece possono mutare, e se il testo che ci immettiamo è più grande di quanto potrebbe essere il compilatore aggiunge in autoamtico i byte per completare la stringa...

    Allora per fare una prova ho scritto questo programma:

    codice:
    import javax.swing.*;
    
    
    public class stringhe {
    
    	public static void main(String[] args) {
    
    		String s1 = "ciao";
    		String output = "s1: " + s1;
    		s1 = "ss";
    		JOptionPane.showMessageDialog(null, output, "Sskdn", JOptionPane.INFORMATION_MESSAGE);
    		
    		s1 = "ssaafR";
    		output = "s1: " + s1;
    		JOptionPane.showMessageDialog(null, output, "Sskdn", JOptionPane.INFORMATION_MESSAGE);		
    		System.exit(0);
    	}
    
    }
    Il primo output stampa Ciao (4lettere), mentre il secondo stampa ssaafR (6 lettere)?

    Ma appena tentao di cambiare un carattere non doveva darmi errore?
    In questo modo mi sembra che String e StringBuffer siano la stessa cosa... no?

    Grazie

  2. #2
    la differenza è invisibile al programmatore:

    mi spiego meglio,


    String aa = "CIAO";

    aa += " PIPPO";

    mi produce "CIAO PIPPO";


    il programma in realtà CREA un oggetto String con valore "CIAO",

    poi CREA un altro oggetto String con valore "CIAO PIPPO"

    in totale, ha istanziato 2 oggetti.


    con lo StringBuffer, qualsiasi modifica si ripercuote sullo STESSO oggetto, pertanto in metodi che iterano molto, e che hanno bisogno di modificare stringhe con latenze basse e rispario di memoria è opportuno utilizzare gli StringBuffer.
    Ci sono cose che non si possono sapere. Per tutto il resto c'è man

    Prima di fare domande stupide: 1) googla 2) leggi le manpages 3) sparati.

  3. #3
    quindi possiamo dire che quando aa cambia valore viene prima distrutto e poi riallocata la memoria necessaria alla nuova stringa?

  4. #4
    potenzialmente,
    se la gc funzionasse ad azione immediata,
    se sfondassi il tetto della memoria con la creazione della nuova stringa,

    direi di si.

    poi in realtà non viene distrutto niente, perde solo il riferimento ma ti ripeto: sono cose invisibili al programmatore.


    comunque in termini pratici è così: lo stringbuffer lavora sempre sullo stesso oggetto, lo String crea nuovi oggetti ad ogni modifica del contenuto.
    Ci sono cose che non si possono sapere. Per tutto il resto c'è man

    Prima di fare domande stupide: 1) googla 2) leggi le manpages 3) sparati.

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.