pourquoi n'est-ce pas (123 == 0123) en java?

Je développe une application dans Android en utilisant Eclipse. J'ai écrit le code suivant et dans les tests le premier et le troisième bloc "if" n'est pas accessible. Pourquoi?

Lorsque j'ajoute un zéro à un nombre, l'opérateur égal renvoie false.

int var = 123;
if (var == 0123) {
    //not reachable
}
if (var == 123) {
    //reachable
}
if (var == (int)0123) {
    //not reachable
}
if (var == (int)123) {
    //reachable
}
23
demandé sur NullPoiиteя 2012-05-05 15:40:18

3 réponses

0123 est un nombre octal (0), alors que 123 est un nombre décimal.

Donc 0123 est égal à 83.

55
répondu MByD 2012-05-05 11:41:06

Tout nombre entier menant à Zéro est un nombre octal (base 8).

0123 est Nombre octal et 123 est un Nombre Décimal

 0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
        =3+16+64+0
        =83   
21
répondu Samir Mangroliya 2012-05-05 11:49:25

Parce que 0123 en chiffre non décimal son octal (base 8) donc c'est égal à 83

Pour convertir un nombre k en décimal, utilisez la formule qui définit sa représentation de base-8:

entrez la description de l'image ici

0123 base-8 = 83 decimal

0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
     =3+16+64+0
     =83   

Un nombre octal se compose d'un chiffre ascii 0 suivi d'un ou plusieurs des chiffres ASCII 0 à 7 et peut représenter un entier positif, zéro ou négatif.

Note: les valeurs octales sont notées en java par un nombre décimal normal zéro ne peut pas avoir un zéro en tête

9
répondu NullPoiиteя 2012-12-23 11:52:29