2012-12-17 7 views
6

Можно создать дубликат:
Java: Long result = -1: cannot convert from int to longПочему Java не поддерживает принуждение и autoboxing?

Например Integer foo = 4 и Long foo = 4L как компилировать, но Long foo = 4 не делает. Есть ли для этого обоснование?

+2

Хороший вопрос. Интересно, может ли это вызвать некоторые двусмысленности. (+1) – NPE

+0

Технически, 'Long foo = 4' не может быть оценен во время компиляции. –

+0

Вы смешиваете конверсию с autoboxing. – Bevor

ответ

4
Long foo = 4; 

означает: назначить int значения 4 к объекту класса Long. Он будет пытаться использовать autoboxing для этого и терпеть неудачу, потому что autoboxing применим только для соответствующего примитива. Он может быть закреплен двумя способами:

Long foo = (long) 4; 
Long foo = 4L; 

в первом случае вы кастовал int 4 до long 4. Во-вторых, вы обеспечиваете долго.

Чтобы ответить на вопрос, Java не поддерживает автоматическое литье и очень Строгий ввод, что, вероятно, поэтому не поддерживает его автоматически.

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