将null值的double转换为String Error

时间:2012-10-31 12:45:58

标签: java

如何解决这个问题

public class DoubleTest {

    public static void main(String[] args) {
        double dbl = (Double) null;
        String str = Double.toString(dbl);
        System.out.println(str);

    }

} 

错误:

Exception in thread "main" java.lang.NullPointerException
    at test.java.DoubleTest.main(DoubleTest.java:6)

请问好吗?

我问这个是因为我有一个返回Double的方法,我必须再次转换为String。

如果我的方法返回 null ,则会出现此问题。

5 个答案:

答案 0 :(得分:6)

这总是会失败:

 double dbl = (Double) null;

您不能将null分配给基元(小写双精度型)。 如果将其更改为大写Double,则赋值将起作用,但Double.toString(dbl)将失败,因为它不能为空。为了防止这种情况,您可以将代码更改为之前建议的(假设db1是Double而不是double):

String str = dbl != null ? Double.toString(dbl) : "null";

这将始终打印“null”,因为db1将始终为null。

答案 1 :(得分:3)

如果你有一个像这样返回null的方法:

Double d = myMethod();

然后你可以像这样进行Double to String转换:

String str = "";

if (d != null)
   str = d.toString();

答案 2 :(得分:1)

From JLS #5.1.8. Unboxing Conversion

  • 如果r是Double类型的引用,则取消装箱转换会转换 进入r.doubleValue()
  • 如果r为null,则拆箱转化会引发NullPointerException

以下是为您的程序生成的字节代码

 0  aconst_null
 1  invokevirtual java.lang.Double.doubleValue() : double [16]
 4  dstore_1 [dbl]
 5  dload_1 [dbl]
 6  invokestatic java.lang.Double.toString(double) : java.lang.String [22]
 9  astore_3 [str]
10  getstatic java.lang.System.out : java.io.PrintStream [26]
13  aload_3 [str]
14  invokevirtual java.io.PrintStream.println(java.lang.String) : void [32]
17  return

适当的解决方案是使用已经处理String.valueOf案例的null

public static void main(String[] args) {
    Double dbl = null;
    String str = String.valueOf(dbl);//Str will have `null` value
    System.out.println(str);

}

第二种方法

public static void main(String[] args) {
    Double dbl = null;
    String str = null;
    if (dbl != null) {
        str = String.valueOf(dbl);// <--This is dead code currently but it
                                    // is useful if you are checking
                                    // against null
    }
    System.out.println(str);

}

答案 3 :(得分:0)

该行

 double dbl = (Double) null; 

是这里的问题,但它实际上与从null到Double的转换有关。由于此处的演员,您将获得Nullpointerexception,而不是因为作业。

将对象Autounboxing为对象为null的原语时会出现类似的问题:

Double myDouble = null;
double dbl = myDouble;

答案 4 :(得分:0)

Double有一个toString方法,理想情况下应该处理转换本身。

由于Double也可以为null,您可能希望自己处理它或让toString将其作为“null”返回。

String str = (dblVariable == null)? {custom-code-here} : dblVariable.toString();