在int和string之间进行解析会产生意外结果

时间:2017-04-13 10:40:49

标签: java string integer datetime-conversion

下面的代码行在java中提供NullPointerException

任何输入(src中的07,11等)

hrs = Integer.toString((Integer.getInteger(hrs)) + 12);

所以我改成了:

Integer  H = Integer.parseInt(hrs);
H = H + 12;
hrs = H.toString();

哪个工作正常。

有谁能告诉我为什么第一行给出 NullpointerException

5 个答案:

答案 0 :(得分:2)

简单:您在两个示例中调用了两种不同的方法。

Integer.getInteger(hrs)

不一样
Integer.parseInt(hrs);

请参阅getInteger()的javadoc:

  

确定具有指定名称的系统属性的整数值。   第一个参数被视为系统属性的名称。可以通过System.getProperty(java.lang.String)方法访问系统属性。然后将此属性的字符串值解释为整数值,并返回表示此值的Integer对象。可以使用getProperty的定义找到可能的数字格式的详细信息。

     

如果没有具有指定名称的属性,如果指定的名称为空或null,或者该属性没有正确的数字格式,则返回null。

然后返回 null

这就是全部。所以,真正的答案可能是:更多地关注"代码" IDE为您提供的建议。不要盲目地接受他们;但要确保你真的放下你打算使用的方法;而不是碰巧有类似签名的其他一些(关于输入参数和返回类型)。

答案 1 :(得分:1)

 public static Integer getInteger(String nm)
  

确定具有指定系统属性的整数值   名称。第一个参数被视为系统属性的名称。   系统属性可通过   System.getProperty(java.lang.String)方法。这个字符串的值   然后将property解释为整数值和Integer对象   表示此值将返回。可能数字的详细信息   可以使用getProperty的定义找到格式。

     

如果没有指定名称的属性,则指定名称   为空或null,或者属性没有正确的数字   格式,然后返回null。

在您的情况下,您很可能需要使用

public static int parseInt(String s,
                           int radix)
                    throws NumberFormatException

有关两者的详细信息,请使用以下link

答案 2 :(得分:0)

你必须像这样使用Integer.parseInt(String)

hrs = Integer.toString((Integer.parseInt(hrs)) + 12);

但你可以改用它:

hrs = (Integer.parseInt(hrs) + 12) + "";

答案 3 :(得分:0)

一个简单的解决方案是

hrs = "" + (Integer.parseInt(hrs) + 12);

答案 4 :(得分:0)

在这种情况下,

Integer.getInteger()不能满足您的目的。如果您看到此方法的文档,则主要是确定具有指定名称的系统属性的整数值。如果给定名称与任何系统属性不匹配,则返回null。

在你的代码中,(Integer.getInteger(hrs))+ 12这基本上导致了NPE,因为你试图将null连接到12

有关详细信息,请参阅this link