Java parseInt vs parseLong

#java #integer #long-integer

#java #целое число #длинное целое

Вопрос:

 String a = "576055795"; 

long b = 10*Integer.parseInt(a);

long c = 10*Long.parseLong(a);

System.out.println(b); //Prints 1465590654 
System.out.println(c); // Prints 5760557950
  

Почему они разные?

Комментарии:

1. Знаете ли вы, чем Integer и Long отличаются?

2. Я знаю о диапазоне, да

3. Вы знаете, что 5760557950 находится за пределами диапазона?

4. О, так вам интересно, почему int * int не приводит к long ?

5. Я виноват. Извините. ПОЛУЧИТЕ СЕЙЧАС. 🙂 Спасибо за наглядное объяснение.

Ответ №1:

Integer.parseInt() возвращает int , которое является 32-разрядным целым числом со знаком. 10 также является int ; умножение 576055795 на 10 при переполнении целых чисел приводит к int , которое затем повышается до long .

Long.parseLong() возвращает long , которое является 64-разрядным целым числом со знаком. Умножение его на 10 дает long без переполнения.

Комментарии:

1. Ах! Стек превышает поток! Спасибо

2. @zack: Нет, не переполнение стека. Переполнение целого числа.

3. Я имел в виду это как восхищение stack overflow. Почувствуйте тон.