2013-10-08 5 views
0

J'ai une question simple que je ne semble pas trouver de réponse. Je pense que c'est très simple et je peux le prendre comme des bizarreries.initialisation de matrice zéro par rapport à zéro attribué

int[] newArray=new int[5]; 

initialisera un tableau et aura tous les zéros dans les 5 positions.

newArray[4]=0; 
//versus not assigning any value to specific position newArray[4] 

Est-ce la même chose? Si non, comment différencier ces deux-là?

Comment puis-je différencier les zéros qui ont été placés automatiquement lorsque le tableau a été créé par rapport à zéros qui a été attribué dans le programme à un moment donné? La principale raison pour laquelle je pose cette question est que j'ai un programme qui attribue une valeur entière à une position aléatoire dans le tableau, qui peut également être 0. Pendant la recherche, je veux savoir quels zéros ont été assignés par programme par rapport aux initialisés zéro.

+3

Le résultat est le même. Tous les 0 sont créés égaux. – Thilo

+1

En dehors de ce négatif encombrant 0 –

Répondre

2

Puisque vous mettez int s dans votre tableau, ils sont équivalents parce que la valeur par défaut de int est . Vous ne serez pas en mesure de différencier les deux parce que est égal à . Si vous utilisez Integer, le tableau sera initialisé avec null s. Dans ce cas, vous pouvez dire si une valeur a été définie ou non.

Si vous voulez être en mesure de faire la différence, vous pouvez utiliser des références.

1

int[] newArray=new int[5] initialise tous les éléments à 0 par défaut.

newArray[4]=0 règlera la valeur de l'élément 5 à 0. Pour tous les autres seront par défaut de toute façon. Donc, il n'y a pas de différence entre les deux.

Pour comprendre cet ensemble à la place newArray[4]=10.

Maintenant, le contenu du tableau est {0,0,0,0,10}

1

Pourquoi dites-vous bizarrerie? Il est clair que chaque référence et primitive a une valeur par défaut initiale en Java. Pour int c'est 0. Pour les références c'est null.

0

Si vous par exemple une variable en tant que membre d'une classe, il aura une valeur par défaut: 0 pour les nombres et null pour les objets. Mais si vous déclarez cette variable à l'intérieur d'une méthode, le compilateur n'attribue pas de valeur par défaut à cette variable, son contenu n'est donc pas défini tant que vous ne l'avez pas défini. Donc, si vous le faites dans une méthode, ce n'est pas équivalent ;-)

+0

Donc, int [] newArray = new int [5]; à l'intérieur de la méthode va laisser toutes les positions indéfinies !!! –