2013-11-26 14 views
6

Stavo sfogliando uno dei miei vecchi libri di testo e ho trovato questo brano che definisce gli array in Java:Java Libro di testo: "la dimensione di un array deve essere noto al momento della compilazione"

Un array monodimensionale è un tipo di dati compositi strutturato costituito da una raccolta di elementi omogenea ordinata, fissata a misura fissa a cui è disponibile l'accesso diretto. Finite indica che c'è un ultimo elemento . La dimensione fissa indica che la dimensione dell'array deve essere nota al momento della compilazione , ma ciò non significa che tutti gli slot dell'array devono contenere valori significativi.

Ho una conoscenza di base degli array e trovo a mio agio con loro nei compiti quotidiani, ma io sono molto confuso dalla dichiarazione che la dimensione degli array deve essere noto al momento della compilazione.

Un semplice programma Java dimostra che un array può essere istanziata con una dimensione variabile in fase di esecuzione:

import java.util.Scanner; 

public class test 
{ 
    public static void main(String[] args) 
    { 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Enter a number: "); 
     int size = scan.nextInt(); 
     int[] array = new int[size]; 
     System.out.println("You just create an array of size " + array.length); 
    } 
} 

Questo compila, esegue, e raggiunge la fine senza errori.

Cosa dà?

+0

Puoi pubblicare ulteriori informazioni su questo particolare libro di testo (link, autore, nome)? –

+0

Devo dire che l'autore fornisce qui una definizione molto imprecisa. OP ha una critica molto valida. Direi semplicemente che l'autore è sbagliato o che le sue espressioni non presentano correttamente la sua idea. Quando diciamo che la dimensione dell'array è nota in fase di compilazione, stiamo parlando di casi simili (più vecchi) C/C++ –

+0

Il libro è Strutture dati orientate agli oggetti che utilizzano Java (First Edition) di Dale, Joyce e Weems. Questo paragrafo è a pagina 90. – CptSupermrkt

risposta

3

Si tratta di un paragrafo molto mal scritto, ma se lo si interpreta liberamente, è corretto.

Nell'esempio, la dimensione dell'array è nota al momento della compilazione. La dimensione è size.

Stai interpretando "noto in fase di compilazione" con "statico" o "costante", che è comprensibile. Naturalmente, come sappiamo, la JVM assegna la memoria dinamicamente in base al valore di size.

Probabilmente l'autore sta cercando di distinguere tra una matrice e qualcosa di simile a ArrayList, in cui le dimensioni non devono essere specificate al momento dell'inizializzazione.

0

La dimensione di un array qui è "dimensione". Il compilatore non si preoccupa di cosa potrebbe esserci nella "dimensione". La memoria non è allocata durante la fase di compilazione, è allocata durante il runtime. Durante la compilazione le variabili non vengono controllate direttamente per ottenere i loro valori. È solo durante il runtime che il compilatore vede ciò che è presente nella "dimensione" e alloca la memoria.

Problemi correlati