#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. Почувствуйте тон.