Java Object.intValue()的奇怪行为

Java Object.intValue()的奇怪行为,java,typing,autoboxing,Java,Typing,Autoboxing,我正在努力解决一个问题,我不明白为什么它不起作用。如何通过双obj传递变量并将其转换为int? 为什么它在上面的代码段中不起作用,但在下面的代码段中起作用 唯一的区别似乎是添加了一个额外的变量,该变量也被键入为double //Converting double to int using helper //This doesn't work- gets error message //Cannot invoke intValue() on the primitive type 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);

您在上面的代码段中,试图将一个双对象分配给这样的基本类型

double doubleObj=new Double( doublehelpermethod);
由于取消装箱(将包装器类型转换为其等效的基元类型),这当然会起作用,但您所面临的问题是取消对
doublehelpermethod
的引用

doublehelpermethod.intValue()

不可能,因为
doublehelpermethod
是一个基本类型变量,不能使用点
关联,请参见

您在最上面的代码段中,试图将一个Double对象分配给这样的基元类型

double doubleObj=new Double( doublehelpermethod);
由于取消装箱(将包装器类型转换为其等效的基元类型),这当然会起作用,但您所面临的问题是取消对
doublehelpermethod
的引用

doublehelpermethod.intValue()

不可能,因为
doublehelpermethod
是一个基本类型变量,不能使用点
关联,请参见

double
是一个基本类型,而
double
是一个常规Java类。不能对基元类型调用方法。但是,
intValue()
方法在
Double
上可用,如中所示


更多关于这些基本类型的阅读可以在中找到
double
是基本类型,而
double
是常规Java类。不能对基元类型调用方法。但是,
intValue()
方法在
Double
上可用,如中所示


关于这些基本类型的更多阅读可以在这里找到

只是有点吹毛求疵,但是您的变量名命名法应该是一致的。如果您要对变量名使用驼峰式大小写,请将其全部完成。混搭是个坏主意。另外,在变量名后面加上“helpermethod”一词可能会引起以后的混淆。这里有点吹毛求疵,但是变量名的命名应该是一致的。如果您要对变量名使用驼峰式大小写,请将其全部完成。混搭是个坏主意。另外,在变量名后面添加单词“helpermethod”可能会导致以后的混淆..好的-我知道了-那么我该如何让最上面的代码片段工作呢?我已经尝试过这个-System.out.println(“双精度值是:”+doubleObj.intValue());但这也不起作用,将赋值改为
Double doubleObj=new Double(doublehelpermethod)太棒了,我不敢相信我错过了首都!但是感谢罗宾对原因的精彩解释——真的很有启发性。好吧——我明白了——那么我该如何让顶级代码片段发挥作用呢?我已经尝试过这个-System.out.println(“双精度值是:”+doubleObj.intValue());但这也不起作用,将赋值改为
Double doubleObj=new Double(doublehelpermethod)太棒了,我不敢相信我错过了首都!但感谢罗宾对原因的精彩解释——真的很有启发性。