下面的代码行在java中提供NullPointerException
任何输入(src中的07,11等)
hrs = Integer.toString((Integer.getInteger(hrs)) + 12);
所以我改成了:
Integer H = Integer.parseInt(hrs);
H = H + 12;
hrs = H.toString();
哪个工作正常。
有谁能告诉我为什么第一行给出 NullpointerException ?
答案 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