有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在变量声明中使用double vs double

我试图用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();处给出错误


共 (2) 个答案

  1. # 1 楼答案

    d.toString();将无法工作,因为d是基元类型。你可以打电话。toString函数仅适用于对象。因此,如果您使用Double,这是一个对象,而不是原语,那么您的代码将正常工作。这与自动装箱无关

  2. # 2 楼答案

    不能对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);
    

    。。。这两种方法都有效