int和字符串,给出了意想不到的效果

问题描述:

下面的代码行之间的解析提供了NullPointerException在Javaint和字符串,给出了意想不到的效果

任何输入(在SRC 07,11等)

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

所以我改成了:

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

哪个工作正常。

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

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

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

但你可以使用它代替:

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

简单:你在呼唤你的两个例子,两种不同的方法。

Integer.getInteger(hrs) 

是不一样的

Integer.parseInt(hrs); 

getInteger()的Javadoc:

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

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

Then null is returned!

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

一个简单的解决方案是

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

public static Integer getInteger(String nm) 

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

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

你的情况,则很可能需要使用

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

对于两者请使用以下细节link

+0

人我没注意到它。我想我们都在同一线路上思考,你在我之前发布。如果你这么说,我可以删除我的。我没有任何问题... – Jabir

+0

不用担心;只是想明白。关闭编辑窗口并获得“似曾相识”的体验感觉很奇怪。无论如何我刚刚收到我对字符串标签的100票;所以...让我们分享快乐;-) – GhostCat

Integer.getInteger()不提供你的目的在这种情况下。如果您看到此方法的文档,则主要是使用指定的名称确定系统属性的整数值。如果给定名称与任何系统属性都不匹配,则返回null。

在你的代码,(Integer.getInteger(小时))+ 12这基本上是造成NPE与您试图用12

来连接空请参阅this link更多细节