Преобразование int в long

Рейтинг: 0Ответов: 1Опубликовано: 10.12.2014
static void l(long l){
    System.out.println("l" + l);
}

static void i(int i){
    System.out.println("i  = " + i);
}

public static void main(String[] args){

    i(1000000000*9);

}

Почему результат будет таков

i = 410065408

Ответы

▲ 2

Судя по всему просто происходит переполнение. int в java имеет размерность 4 байта, и его максимальное значение равно 2 147 483 647, что явно меньше, чем 1000000000*9 (9 миллиардов).

Но прикол тут в том, что ваше число представлено как произведение двух чисел, каждое из которых умещается в рамках int. Будь у вас написано просто 9000000000, вы бы просто получили ошибку компиляции. Я не знаток java, и меня тут несколько удивляет, почему java не высчитывает это произведение в compile-time (а это константа времени компиляции), благодаря чему можно было бы понять, что число в рамки int не влезет и выдать ошибку компиляции, что уберегло бы от такой неочевидной проблемы