Java Int подразделение смущает меня - PullRequest
10 голосов
/ 10 ноября 2009

Я делаю очень простое int-подразделение и получаю странные результаты.

Этот код печатает 2, как и ожидалось:

public static void main(String[] args) {
    int i = 200;
    int hundNum = i / 100;
    System.out.println(hundNum);
}

Этот код печатает 1 как , а не Ожидается:

public static void main(String[] args) {
    int i = 0200;
    int hundNum = i / 100;
    System.out.println(hundNum);
}

Что здесь происходит?

(Windows XP Pro, Java 1.6 работает в Eclipse 3.4.1)

Ответы [ 3 ]

22 голосов
/ 10 ноября 2009

Значение 0200 является восьмеричной (основание 8) константой. Он равен 128 (десятичному).

С Раздел 3.10.1 спецификации языка Java :

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

6 голосов
/ 10 ноября 2009

Значение 0200 является восьмеричным, что составляет 128 в десятичном виде.

Подробнее см. В разделе литералов объяснения Примитивные типы данных .

1 голос
/ 10 ноября 2009

Здесь наблюдается интересное поведение.

Если я сделаю Integer.parseInt("0200"), я получу 200 как о / п.

Howzzat?!

...