Inizializzare un array

di il
5 risposte

Inizializzare un array

Ciao ragazzi...
ho questo codice qui.

public class prova {
//modo 'A'
	public static void main(String[] args) {
		
		String nomeFiori[] = {"PETUNIE","VIOLE DEL PENSIERO","ROSE","VIOLETTE","GAROFANI"};
		double prezzo[] = {0.50, 0.75, 1.50, 0.50, 0.80};
		
		nomeFiori = new String[5];
		prezzo = new double[5];
		
		System.out.println(prezzo[4]);
		System.out.println(nomeFiori[4]);
		}
}
La stampa a video mi da come risultato '0' e 'null'.

se invece lo inizializzo in questo modo per esempio:

	//modo 'B'
	nomeFiori[4] = "VIOLETTE";
	prezzo[4] = 0.50;
L'inizializzazion ha sucesso.
Eppure sul libro c'è scritto che l'inizializzazione tipo 'A' deve funzionare.
E' uguale al 'C' olltretutto... non capisco se sbaglio e dove sbaglio.

5 Risposte

  • Re: Inizializzare un array

    Il fatto è che nel tuo "modo A" queste due righe :
    
    nomeFiori = new String[5];
    prezzo = new double[5];
    
    Ricreano i due array e così il loro originale contenuto viene cancellato. Per il tipo double ogni elemento del vettore viene fissato a 0, mentre per il tipo String, che non è primitivo, ogni valore è inizialmente posto a null.
  • Re: Inizializzare un array

    Hai ragione.
    Ho tolto la new e mi va.
    Però adesso mi viene un dubbio.
    Ma se
    
    String nomeFiori[]
    
    è una dichiarazione.
    Come fa, ad istanziare l'oggetto, se non lo scrivo con la new...
    Perchè ovviamente gli array sono degli oggetti...
    Dev'essere cosi...

    Nel mio 'modo A'
    quindi è come se prima scrivo la memoria e poi la formatto ahahah
  • Re: Inizializzare un array

    Alexxandro ha scritto:


    Ma se
    
    String nomeFiori[]
    
    è una dichiarazione.
    Come fa, ad istanziare l'oggetto, se non lo scrivo con la new...
    Lo fa implicitamente la inizializzazione con le { } ... sostanzialmente è come una istanziazione + assegnamento iniziale.
  • Re: Inizializzare un array

    Credo di aver capito
  • Re: Inizializzare un array

    Alexxandro ha scritto:


    Credo di aver capito
    In pratica

    String[] arr = { "abc" };

    viene tradotto in un qualcosa di simile a

    String[] arr = new String[1];
    arr[0] = "abc";

    E dico "simile" solo perché a livello di bytecode nel file .class in realtà le due forme sono leggermente differenti. Ma a livello di risultato non c'è differenza.
Devi accedere o registrarti per scrivere nel forum
5 risposte