2016-04-12 2 views
0

Следующий код не компилируется, потому что значение x является значением long. Поэтому во второй строке невозможно присвоить длинное значение y.Почему это предполагается длинным без суффикса

long x = 10; 
int y = 2 * x; 

Мой вопрос: Первая строка не имеет суффикс L в переменной типа long, не следует ли предположить, чтобы иметь тип int?

+1

Как только он назначен «длинному», он длинный. – Siguza

+0

[Расширение примитивного преобразования] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.2) –

ответ

0

Перед выполнением операции вам нужно будет наложить int.

long x = 10; 
int y = 2 * (int)x; 
0

Результатом операции должен быть int. Если вы не делаете сужающего преобразования o.k.a. операции литья, любого типа примитивного числа в вашей операции для int, то это означает, что результат вашей операции будет иметь более широкий диапазон. Кастинг вы даете компилятору понять, что вы уверены, что ваш результат будет в пределах диапазона int, и таким образом он знает, что вы, похоже, не потеряете информацию (вы можете, хотя даже если вы не бросаете и не ожидаете двойного например, но это совершенно другое дело). Вы можете найти отличное объяснение по вопросам, связанным с вашим вопросом here.

Смежные вопросы