J'ai un tableau de chaînes selectCancel
avec les méthodes setter et getter, qui est une case à cocher dans mon formulaire. J'essaie d'obtenir les valeurs vérifiées et j'obtiens le résultat ci-dessus lorsque j'imprime.
J'ai essayé la méthode Arrays.toString()
mais elle affiche toujours la même chose.
J'ai ensuite fait ce qui suit:
String checked = Arrays.toString(Employee.getSelectCancel());
J'ai aussi essayé avec Arrays.asList()
et Arrays.copyOf()
Alors, comment puis-je lire cette chaîne?
La méthode fonctionne si vous fournissez un tableau. La sortie de
String[] helloWorld = {"Hello", "World"};
System.out.println(helloWorld);
System.out.println(Arrays.toString(helloWorld));
est
[Ljava.lang.String;@45a877
[Hello, World]
(le numéro après @
est presque toujours différent)
Merci de nous indiquer le type de retour de Employee.getSelectCancel()
Ljava.lang.String;@
est renvoyé lorsque vous avez utilisé des tableaux de chaînes en tant que chaînes. Employee.getSelectCancel()
ne semble pas renvoyer un String[]
Selon les spécifications de la machine virtuelle Java (Java SE 8), JVM §4.3.2. Descripteurs de champ :
FieldType term | Type | Interpretation -------------- | --------- | -------------- L ClassName ; | reference | an instance of class ClassName [ | reference | one array dimension ... | ... | ...
l'expression [Ljava.lang.String;@45a877
signifie qu'il s'agit d'un tableau ([
) de la classe Java.lang.String (Ljava.lang.String;
). Et @45a877
est l'adresse où l'objet String est stocké en mémoire.
J'ai également rencontré ce problème lorsque j'ai créé l'application ListView pour Android:
Map<String, Object> m;
for(int i=0; i < dates.length; i++){
m = new HashMap<String, Object>();
m.put(ATTR_DATES, dates[i]);
m.put(ATTR_SQUATS, squats[i]);
m.put(ATTR_BP, benchpress[i]);
m.put(ATTR_ROW, row[i]);
data.add(m);
}
Le problème était que j'ai oublié d'utiliser l'index [i]
dans la boucle