2010-01-06 3 views
1
byte[] b1 = null; 
byte[] b2 = null; 

System.out.println(b1 + b2); // 1 
System.out.println("" + b1 + b2); // 2 

si je décommenter 1 son donner l'erreur de compilation. si je décommenter 2 son impression nullnull;quelqu'un peut-il me dire ce qui se passe ici?

alors qu'est-ce qui se passe ici?

Répondre

7

La ligne 2 effectue une conversion implicite en chaîne des deux tableaux et les concatène, ce qui est valide. Dans la première ligne, vous essayez d'appliquer l'opérateur add à deux tableaux d'octets, ce qui n'est pas pris en charge.

0

1 essaie d'ajouter deux tableaux, tous les deux étant NULL. Cela ne fonctionne pas.

2 ajoute la valeur de chaîne de la matrice (nulle pour les valeurs nulles, le résultat de toString() autrement) à une chaîne vide

0
  1. L'opération d'addition (+) ne sont pas définis pour les tableaux d'octets. Aussi simple que cela. L'opération "special" + pour Strings essaie très fort de convertir toutes sortes de types de données en chaînes pour que l'opération fonctionne. Dans ce cas particulier, convertit une référence nulle dans la chaîne "null". Bizarre mais ça empêche certaines erreurs.

La raison pour laquelle (2) ne s'appliquait pas (1) est qu'il n'y avait pas des chaînes impliquées dans (1), tandis que la présence de « » dans (2) contraint l'expression à évaluer comme Cordes.

1
  1. Vous utilisez l'opérateur + pour les tableaux d'octets comme celui-ci. Donc erreur de compilation.
  2. Les doubles quotes initiales convertissent b1 en b2 en chaîne. Équivalent à b1.toString() + b2.toString(). Donc nullnull
0

Dans 1 vous essayez d'utiliser operator + sur deux tableaux qui n'est pas défini en Java.

Dans 2, vous concaténez une chaîne "" avec la représentation sous forme de chaîne de tableaux null. Cela ne fonctionne que parce que + résout de gauche à droite, donc il est interprété comme une concaténation de chaîne. Déplacez le "" à la fin de la ligne et cela vous donnera aussi des erreurs de compilation.

Questions connexes