Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将空值的双精度转换为字符串错误_Java - Fatal编程技术网

Java 将空值的双精度转换为字符串错误

Java 将空值的双精度转换为字符串错误,java,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.Null

如何解决这个问题

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,则会出现此问题。

这将始终失败:

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


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

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

Double d = myMethod();
String str = "";

if (d != null)
   str = d.toString();
然后您可以进行双精度到字符串的转换,如下所示:

Double d = myMethod();
String str = "";

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

 double dbl = (Double) null; 
这里的问题是,但它实际上与从null到Double的转换有关。您将得到一个
Nullpointerexception
,这是因为这里的强制转换,而不是因为赋值

将对象自动取消绑定到对象为空的基元时,也会出现类似问题:

Double myDouble = null;
double dbl = myDouble;

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

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

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

  • 如果r是类型为
    Double
    的引用,则取消装箱转换将转换 r进入
    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);

}
publicstaticvoidmain(字符串[]args){
双dbl=null;
字符串str=null;
if(dbl!=null){

str=String.valueOf(dbl);//@Mawia Nope。您不能将
null
存储在
double
中。实际上,上面的代码将编译,但由于强制转换而导致Nullpointerexception失败。如果将强制转换删除为double,编译器将捕获原语对null的赋值。。。