1

根据 Oracle 的说法,我应该能够将 和 之类的方法.intValue()应用于.compareTo()双精度,但是当我在 NetBeans 中编写dbl.toString()时,例如,IDE 告诉我不能取消引用双精度。我什至不能将它们转换为形式的整数(Integer) dbl
我有 JDK 1.6 和 NetBeans 6.9.1。这里有什么问题?

4

6 回答 6

2

您提到的方法可以在 Double 类中找到(而不是在 double 原始类型中)。使用原始类型总是更有效,但如果您绝对需要这些方法,请创建一个新的 Double 对象,如下所示:

double d = 10.0;
Double myDouble = new Double(d);
于 2010-12-29T21:23:41.520 回答
1

问题是您对对象与原语的理解。

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

以下是一些使用原语与对象的示例:

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

double d = 10.0;
// wrong
System.out.println(d.toString());
// instead do this
System.out.println(Double.toString(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;
于 2010-12-29T21:59:04.497 回答
0

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 代码。

于 2010-12-29T21:19:14.977 回答
0

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

于 2010-12-29T21:22:08.193 回答
0

你想要(java.lang.)Double的不是原始的double

于 2010-12-29T21:27:47.190 回答
0

本机类型(intfloatdouble等)没有方法。

于 2010-12-29T21:32:00.707 回答