Domanda

Se ho un int array strutturato in questo modo:

private int[][] map = new int[400][400];

E provo a recuperare

map[100][200]

E quell'elemento non è inizializzato, riceverò un errore di compilatore / runtime o restituirà null? E c'è qualche funzione per verificare se un dato elemento / indice esiste / è stato impostato?

È stato utile?

Soluzione

Poiché la dichiarazione dell'array è di tipo primitivo, non verranno visualizzati errori del compilatore o di runtime: verrà restituito il valore predefinito 0.

Se il tuo array fosse stato un array di oggetti, l'array conterrebbe null per qualsiasi elemento non assegnato in modo specifico.

Altri suggerimenti

Non restituirò null perché int è un tipo primitivo. Restituirà il valore 0 predefinito, che è <=>.

Non c'è modo di sapere se è stato impostato qualche elemento, a parte mantenere un array booleano separato.

In Java, solo le variabili di riferimento sono inizializzate su null. I primitivi sono garantiti per restituire valori predefiniti appropriati . Per ints, questo valore è 0.

No.

Gli elementi dell'array sono abbastanza grandi da contenere int s, in questo caso. Non c'è spazio per memorizzare le informazioni su se l'elemento & Quot; esiste & Quot ;. È stato assegnato, quindi esiste. In Java, gli array <=> appena allocati verranno inizializzati su tutti gli elementi zero.

Puoi utilizzare checkstyle , pmd e findbugs sulla tua fonte (findbugs su binario) e ti diranno cose come questa.

Sfortunatamente non sembra che si verifichi questo particolare problema (il che ha senso che l'array sia garantito per avere ogni membro impostato su 0, null o false).

L'uso di questi strumenti può catturare membri di istanza e di classe (che non sono array) che vengono utilizzati prima di ottenere un valore (tipo di problema simile).

Un po 'un argomento morto ma l'ho trovato per caso, quindi inserirò il mio pezzo di saggezza (o qualsiasi altra cosa: P). È possibile utilizzare Arrays.Fill per riempire l'array quando viene creato con un valore non valido come -1. Quindi puoi facilmente fare un if x & Lt; 0 per verificare se hai inizializzato quella specifica posizione dell'array o meno. Solo un'idea ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top