在变量声明中使用double vs Double

时间:2013-05-29 11:27:32

标签: java wrapper tostring

我试图创建此程序,d声明为double而不是Double,请您告诉我为什么此程序无法运行。是不是应该自动包装和解包,比如原始数据类型的装箱和拆箱? 附: - 我是Java的新手我不记得它实际上是什么,但我在某处读到了这个被称为装箱的原始类型的装箱和拆箱。

public class ToStringDemo {

    public static void main(String[] args) {
        double d = 858.48;
        String s = d.toString();

        int dot = s.indexOf('.');

        System.out.println(dot + " digits " +
            "before decimal point.");
        System.out.println( (s.length() - dot - 1) +
            " digits after decimal point.");
    }
}

注意 - 上述程序在String s = d.toString();

时出错

7 个答案:

答案 0 :(得分:2)

  

String s = d.toString();

这是容易出错的代码,因为double无法解除引用。明确地说,你必须将它包装到Double((Double)d).toString()

double是原始类型,它没有toString方法。只有对象包含方法。 toStringObject类的方法,您可以使用Double方法{。}}。

toString

答案 1 :(得分:1)

您无法调用double等基本类型的方法 - 而您可以在Double等包装类型上调用它们。这就是你给出的代码不起作用的原因。

拳击确实会自动发生 - 但只有当你有效地给它作为转换的目标时。例如,您可以使用:

double d = 858.48;
Double boxed = d;
String text = boxed.toString();

...但是如果没有在代码中提及,则不会发生到Double的中间转换。当然,你仍然可以在一行中完成:

String text = ((Double) d).toString();

您根本不需要将值转换为字符串,请注意:

String text1 = String.valueOf(d);
String text2 = Double.toString(d);

......也会起作用。

答案 2 :(得分:1)

double是原始数据类型,而Double是包装类。使用Double可以调用toString()之类的方法。你可以做点什么

Double d = 2.4;
d.toString();

但你不能做像

这样的事情
double d = 2.4;
d.toString();    // Generates compile time error.

答案 3 :(得分:0)

试试这个..

 public class ToStringDemo {

public static void main(String[] args) {
    double d = 858.48;
    String s = String.valueOf(d);
    int dot = s.indexOf('.');
    System.out.println(dot + " digits " +
        "before decimal point.");
    System.out.println( (s.length() - dot - 1) +
        " digits after decimal point.");
}
}

答案 4 :(得分:0)

由于没有Double引用,因此未进行自动装箱。试试((Double)d).toString()

答案 5 :(得分:0)

d.toString();因为d是原始类型,所以不会起作用。您只能在对象上调用.toString函数。因此,如果您使用Double,它是一个对象而不是原始的,您的代码将起作用。它与自动装箱无关。

答案 6 :(得分:0)

程序无法运行的原因是因为您尝试在原始数据类型上调用方法。 Capital D double表示一个双重对象,其功能类似于原始双变量,因为它存储了双重值,但添加了一个功能,您可以在其上调用预定义的方法。

如果您想使用双原语,您可以执行以下操作:

double aDouble = 100;
String aString = Double.toString(aDouble);

将原语作为参数传递给Double对象上的方法,该对象将返回一个字符串。