2011-01-08 13 views
2

Ich habe einige Code geschrieben, die Zeichenfolgen verwendet, um Zeit wie "0620" darzustellen, aber nach sorgfältiger Überlegung erkannte ich, dass diese in Shorts für Vergleichsleistung und Speichergewinne analysiert werden konnten.Shorts in Android und Java

In einem Komponententest habe ich eine kurze geschrieben als 0620 verglichen mit einem Rückgabewert von 620, erwartet, dass dies funktioniert. Jedoch ist der Test 0620 gleich 620 (beide sind Shorts) fehlgeschlagen.

Die Fehlermeldung besagt, dass 0620 als 400 (und 400! = 620 zur Erklärung des Fehlers) unterbrochen wurde. Das Entfernen des Leads 0 behebt das Problem, aber ich wollte wissen, was ist damit los?

funktioniert das nicht

assertEquals("Time Failed", 0620, st.GetTime()); 

Diese

assertEquals("Time Failed", 620, st.GetTime()); 

Antwort

6

Ein Ganzzahlliteral beginnend mit einem 0 als oktale interpretiert wird (Basis 8) laut Java language specification:

oktale Ziffer eines ASCII durch eine Ziffer 0 gefolgt besteht oder mehr der ASCII Ziffern 0 bis 7 und kann eine positive, Null oder negative ganze Zahl darstellen.

Ich glaube, dies ist eine der Macken Java von C. geerbt

3

0620 bedeutet Oktal (Basis 8) in Java Works ich denke, es in Android ist das gleiche oder 0620 == 400 nicht 620

 int decVal = 26; // The number 26, in decimal 
    int octVal = 032; // The number 26, in octal 
    int hexVal = 0x1a; // The number 26, in hexadecimal 

example from java tutorials at SUN/Oracle