看起来双类型变量没有方法。Java或NetBeans有什么问题吗?

看起来双类型变量没有方法。Java或NetBeans有什么问题吗?,java,netbeans,methods,double,dereference,Java,Netbeans,Methods,Double,Dereference,根据Oracle,我应该能够将.intValue()和.compareTo()等方法应用于double,但当我在NetBeans中写入dbl.toString()时,例如,IDE告诉我double不能被取消引用。我甚至不能将它们转换为(Integer)dbl格式的整数 我有JDK1.6和NetBeans6.9.1。这里有什么问题?double是一个原语而不是对象。因此,它没有方法。一般来说,你要做的是像这样使用语言 double d = 1.1; System.out.println("d= "

根据Oracle,我应该能够将
.intValue()
.compareTo()
等方法应用于double,但当我在NetBeans中写入
dbl.toString()
时,例如,IDE告诉我double不能被取消引用。我甚至不能将它们转换为
(Integer)dbl
格式的整数

我有JDK1.6和NetBeans6.9.1。这里有什么问题?

double是一个原语而不是对象。因此,它没有方法。一般来说,你要做的是像这样使用语言

double d = 1.1;
System.out.println("d= "+d); // calls Double.toString(d) for you.

int i = (int) d; // more efficient than new Double(d).intValue();

if (d >= 1.0) // does a compare.

也许如果你说你想要实现什么,我们可以向你指出可以实现这一点的Java代码。

每个对象都有一个toString方法,因此可能你的JDK在NetBeans中没有正确配置。

你提到的方法是在Double类中找到的(而不是在Double基元类型中)。使用基元类型总是更有效,但如果您确实需要这些方法,请创建一个新的双对象,如下所示:

double d = 10.0;
Double myDouble = new Double(d);

您希望Double而不是原语
Double

本机类型(
int
float
Double
等)没有方法。

问题在于您对对象和原语的理解

最重要的是,您只需要认识到大写的名称是类似于原语的对象类,只有当您需要将数据从原语发送到只接受对象的方法中时,才需要这样做。强制转换失败,因为您试图将一个基元(双精度)强制转换为一个对象(整数),而不是另一个基元(int)

以下是使用基本体与对象的一些示例:

Double类有一个静态方法toString():

其他方法可以直接使用运算符,而不是调用方法

double a = 10.0, b = 5.0;

// wrong
if( a.compareTo(b) > 0 ) { /* ... */ }
// instead you can simply do this:
if( a >= b) { /* ... */ }

int a = 0;
double b = 10.0;

// wrong
a = b.intValue();
// perform the cast directly.
a = (int)b;

您可能想为您遇到的问题显示一些示例代码,或者让自动装箱发挥它的神奇作用——这也起作用:Double myDouble=d;
double a = 10.0, b = 5.0;

// wrong
if( a.compareTo(b) > 0 ) { /* ... */ }
// instead you can simply do this:
if( a >= b) { /* ... */ }

int a = 0;
double b = 10.0;

// wrong
a = b.intValue();
// perform the cast directly.
a = (int)b;