Шорты в Android и Java - PullRequest
       13

Шорты в Android и Java

2 голосов
/ 09 января 2011

Я написал некоторый код, который использовал строки для представления времени, такие как «0620», но после тщательного размышления я понял, что их можно разбить на шорты для сравнения производительности и увеличения памяти.

В модульном тестеУ меня короткая позиция, написанная как 0620, сравниваемая с возвращаемым значением 620, ожидая, что это сработает.Однако тест 0620 равен 620 (оба являются короткими) не пройден.

В сообщении об ошибке говорится, что 0620 был прерван как 400 (и 400! = 620, объясняя сбой).Удаление отведения 0 устраняет проблему, но я хотел знать, что с этим происходит?

Это не работает

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

Это работает

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

Ответы [ 2 ]

6 голосов
/ 09 января 2011

Целочисленный литерал, начинающийся с 0, интерпретируется как восьмеричное (основание 8) согласно спецификации языка Java :

Восьмеричное число состоит из ASCII цифра 0, за которой следует один или несколько ASCII цифры от 0 до 7 и могут представляет собой положительный, ноль или отрицательное целое число.

Я полагаю, что это одна из особенностей Java, унаследованных от C.

3 голосов
/ 09 января 2011

0620 означает восьмеричное (основание 8) в Java, я думаю, что это то же самое в Android или 0620 == 400 не 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

пример из учебников по Java в SUN / Oracle

...