2010-09-09 2 views
3

следующие работыПрисвоение целочисленного значения поплавком обертку в Java

float a=3; 

но следующий не будет:

Float a=3; 

не 3 Должно быть автоматически преобразован плавать (как расширение преобразования дон 't требуется явное преобразование), а затем в штучной упаковке для типа Float?

Это из-за правила, которое я прочитал в книге Халида Могула о Java?

Расширяющих преобразования не могут следовать любых преобразований бокса

+0

u должен сказать Float a = 3.0f; –

ответ

3

Причина Float a=3; не будет работать, потому что компилятор оборачивает 3 в это объект Integer (в сущности, компилятор это: Float a = new Integer(3);, и это уже ошибка компилятора). Объект Float - это не объект Integer (хотя они и принадлежат одному и тому же объекту Number).

следующих работы:

Number a = 3; 

, который, в сущности, переводится компилятор как:

Number a = new Integer(3); 

или Joachim Sauer упоминался,

Number a = Integer.valueOf(3); 

Надеется, что это помогает.

+0

Фактически авто-бокс является эквивалентом 'Integer.valueOf (3)', а не 'new Integer (3)'. Разница в том, что первая делает некоторое кэширование общих ценностей. –

+0

Aaah, приятно знать .... спасибо Иоахим Зауэр. –

+0

Спасибо. 3 переводится как Integer.valueOf (3), но что происходит, когда мы выписываем 3 как (Float) 3? Вызывается ли Float.valueOf (3)? – Daud

2
Float    Integer 
^    ^
    |     | 
    |     | 
    v     v 
float <-----------> int 

Существует бокс/распаковка преобразования betwen примитива и обертки, и есть продвижение от одного числового примитивного к другому. Но Java не может сделать это преобразование дважды (конвертировать из int в Float, в вашем случае).

-1

Float a = 3.0f; будет работать.

+0

Вы протестировали это? –

+0

да это работает. –

+0

Ницца. Я попросил об этом, чтобы побудить респондентов сначала доказать свои ответы, прежде чем публиковать их. Это дает облегчение тем, кто читает ваш ответ. –

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