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的赋值。。。