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

    [java] final, ma non tanto?

    codice:
    public class UsingAsList {
        private static final String values[] = {"red", "white", "blue"};
        private List list;
        
        /** Creates a new instance of UsingAsList */
        public UsingAsList() {
            list = Arrays.asList(values);
            list.set(1, "green");
        }
        
        //visualizza List e array
        public void printElement(){
            System.out.println("list elements: ");
            for(int i = 0; i < list.size(); i++)
                System.out.print(list.get(i) + " ");
            
            System.out.println("\nArray elememnts: ");
            for(int i = 0; i < values.length; i++)
                System.out.print(values[i] + " ");
            
            System.out.println();
        }    
        
        public static void main(String[] args) {
            
            new UsingAsList().printElement();
        }
    nella dichiarazione:
    private static final String values[] = {"red", "white", "blue"};
    il "final" non sta ad indicare "const" equivalente in C?
    Allora perche' il programma puo' modificare il contenuto dell'array values?
    L'unica soluzione che mi viene in mente e' quella del C:
    values e' un puntatore variabile a puntatori costanti,
    e questi puntatori costanti puntano a dati variabili.
    E quindi si spiega la modificabilita' dei dati.
    Qualcuno mi puo' dire se cio' che ho affermato e' giusto?
    Nulla, ma e' sempre qualcosa.

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    final non sono gli elementi del array ma l'array stesso, se provi infatti a fare:


    codice:
    values = null
    Ottieni l'errore:

    UsingAsList.java:11: cannot assign a value to final variable values
    values = null;
    ^

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Quindi in questo caso final si riferisce a values che diviene in questa maniera costante allora correggo l'affermazione di prima:
    values e' un puntatore costante a puntatori costanti,
    e questi puntatori costanti puntano a dati variabili.
    Esatto?
    Nulla, ma e' sempre qualcosa.

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    il finel si riferisce all'oggetto dichiarato, che nel tuo caso è l'array, non i suoi elementi

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    Infatti gli elementi sono modificabili, pero' faccio i paragono col C esempio:

    const char* string[] = {"ciao", "come stai", "molto bene"};

    Cosi sto replicando la stessa istruzione di prima scritta in Java.
    CORREGETEMI!!

    Quind:
    1)string = puntatore costante
    2)char* = puntatore costante(reso da const che lo precede)
    3)i dati sono variabili
    Nulla, ma e' sempre qualcosa.

  6. #6
    Conclusioni il final fa cio che fa const, ma non rispetta la regola che tale istruzione viene applicata all'identificatore che lo sussegue.


    final String values[]//final si riferisce a values non a String(gli elementi)
    Nulla, ma e' sempre qualcosa.

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.