Java 在int和string之间进行解析,得到意外结果

Java 在int和string之间进行解析,得到意外结果,java,string,integer,datetime-conversion,Java,String,Integer,Datetime Conversion,下面的代码行给出了java中的NullPointerException 对于任何输入(src中的07,11等) 所以我把它改成: Integer H = Integer.parseInt(hrs); H = H + 12; hrs = H.toString(); 这很好用 有谁能告诉我为什么第一行给出了NullpointerException?您必须像这样使用Integer.parseInt(String): hrs = Integer.toString((Integer.parseInt(

下面的代码行给出了java中的
NullPointerException

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

所以我把它改成:

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.parseInt(String)

hrs = Integer.toString((Integer.parseInt(hrs)) + 12);
但是你可以用这个来代替:

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

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

Integer.getInteger(hrs)
不一样

Integer.parseInt(hrs);
请参阅javadoc以了解:

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

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

然后返回null


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

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

Integer.getInteger(hrs)
不一样

Integer.parseInt(hrs);
请参阅javadoc以了解:

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

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

然后返回null

这就是一切。因此,真正的答案可能是:更多地关注IDE提供给您的“代码”建议。不要盲目地接受它们;但是要确保你确实在写下你打算使用的方法;而不是其他恰好有类似签名的(关于输入参数和返回类型)。

一个简单的解决方案是

hrs = "" + (Integer.parseInt(hrs) + 12);
一个简单的解决方案是

hrs = "" + (Integer.parseInt(hrs) + 12);
确定具有指定值的系统属性的整数值 名称第一个参数被视为系统属性的名称。 系统属性可通过 getProperty(java.lang.String)方法。此字段的字符串值 属性然后被解释为整数值和整数对象 返回表示此值的。可能出现的数字错误的详细信息 格式可以通过getProperty的定义找到

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

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

public static int parseInt(String s,
                           int radix)
                    throws NumberFormatException
有关这两个方面的详细信息,请使用以下内容

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

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

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

public static int parseInt(String s,
                           int radix)
                    throws NumberFormatException
有关这两种方法的详细信息,请使用以下整数。在本例中,getInteger()不起作用。如果您看到此方法的文档,主要是确定具有指定名称的系统属性的整数值。如果给定的名称与任何系统属性都不匹配,则返回null

在您的代码中,(Integer.getInteger(hrs))+12这基本上是导致NPE的原因,因为您试图将null与12连接起来

有关更多详细信息,请参见

Integer。在本例中,getInteger()不起作用。如果您看到此方法的文档,主要是确定具有指定名称的系统属性的整数值。如果给定的名称与任何系统属性都不匹配,则返回null

在您的代码中,(Integer.getInteger(hrs))+12这基本上是导致NPE的原因,因为您试图将null与12连接起来


请查看更多详细信息,我没有注意到。我想我们都在同一条线上思考,而你在我之前发布。如果你这么说,我可以删除我的。我对此没有任何问题……不用担心;我只是想了解。关闭编辑窗口,获得“似曾相识”的体验,感觉很奇怪。不管怎样;我刚刚收到我对字符串标签的100票;所以让我们分享快乐;-)伙计,我没注意到。我想我们都在同一条线上思考,而你在我之前发布。如果你这么说,我可以删除我的。我对此没有任何问题……不用担心;只是