Странное поведение с Object.intValue()

Я борюсь с проблемой, которую я не могу понять, почему она не работает. Как передать переменную через double obj и преобразовать в int?
Почему это не работает в верхнем фрагменте кода, но работает в нижнем фрагменте кода под строкой?

Единственное отличие заключается в добавлении дополнительной переменной, которая также имеет тип double?

//Converting double to int using helper

//This doesn't work- gets error message
//Cannot invoke intValue() on the primitive type double

double doublehelpermethod = 123.65;
double doubleObj = new Double( doublehelpermethod);
System.out.println("The double value is: "+ doublehelpermethod.intValue());
//--------------------------------------------------------------------------
//but this works! Why?

Double d = new Double(123.65);
System.out.println("The double object is: "+ doubleObj);

person UKDataGeek    schedule 25.12.2011    source источник
comment
Просто будьте немного придирчивы, но ваша номенклатура имен переменных должна быть последовательной. Если вы собираетесь использовать верблюжий регистр для имен переменных, сделайте это до конца. Плохая идея смешивать и сочетать. Также добавление слова helpermethod к имени переменной может позже вызвать путаницу.   -  person The Code Pimp    schedule 26.12.2011


Ответы (2)


double — это примитивный тип, а Double — обычный класс Java. Вы не можете вызвать метод для примитивного типа. Однако метод intValue() доступен на Double, как показано в javadoc

Дополнительную информацию об этих примитивных типах можно найти здесь

person Robin    schedule 25.12.2011
comment
хорошо, я понял, так как мне заставить работать код верхнего фрагмента? Я пробовал это: System.out.println (двойное значение: + doubleObj.intValue()); но это тоже не работает - person UKDataGeek; 26.12.2011
comment
Измените назначение на Double doubleObj = new Double( doublehelpermethod); - person Robin; 26.12.2011
comment
Удивительно, я не могу поверить, что пропустил столицу! Но спасибо Робин за превосходное объяснение, почему - действительно поучительно. - person UKDataGeek; 28.12.2011

Вы находитесь в верхнем фрагменте кода и пытаетесь присвоить объект Double такому примитивному типу, как этот.

double doubleObj=new Double( doublehelpermethod);

что, конечно, сработает из-за распаковки (преобразования типа оболочки в его эквивалентный примитивный тип), но проблема, с которой вы столкнулись, - это разыменование doublehelpermethod.

doublehelpermethod.intValue()

невозможно, потому что doublehelpermethod является переменной примитивного типа и не может быть связана с помощью точки . См.... Автоупаковка

person Lion    schedule 25.12.2011