为什么Integer.getInteger不起作用?

我有以下代码:

game.log.fine("HERE" + bestMove.get("score")); Integer bestScore = Integer.getInteger(bestMove.get("score")); game.log.fine("THERE" + bestScore); 

作为输出我有:

 FINE: HERE50 Dec 9, 2010 11:34:17 AM game.Agent getCloud FINE: THEREnull Dec 9, 2010 11:34:17 AM game.Agent getCloud 

可能我必须添加bestMove是HashMap

问题是bestMove.get("score")给出一个字符串值(等于“50”)。 但是如果尝试转换为整数,我会得到null

有人知道这里有什么问题吗?

因为Integer.getInteger不是您要搜索的内容。 来自Javadoc:

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

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

您想使用Integer.parseInt

我会使用Integer.valueOf(String n)方法。

 Integer bestScore = Integer.valueOf(bestMove.get("score")); 

从这个博客 ,他们给出的原因,

Integer.getInteger(String)通过假设String是系统属性数字表示的名称将Integer.getInteger(String)转换为数字。 换一种说法。 Integer.getInteger("12345")可能会产生null

我怀疑你正在寻找Integer.parseInt方法:

将字符串参数解析为带符号的十进制整数。

用法示例:

 int bestScore = 0; try { bestScore = Integer.parseInt(bestMove.get("score")); } catch (NumberFormatException nfe) { // handle exception gracefully } 

Integer.getInteger做了一些完全不同的事情:

确定具有指定名称的系统属性的整数值。

基本Integer.getInteger

java.lang.Integer.getInteger(String nm, int val)方法确定具有指定名称的系统属性的整数值 。参数val默认值
如果没有指定名称的属性,如果属性没有正确的数字格式 ,或者指定的名称为null ,则返回表示第二个参数值的Integer对象

要么

java.lang.Integer.getInteger(String nm)确定具有指定名称的系统属性的整数值。 该参数被视为系统属性的名称 。 然后将此属性的字符串值解释为整数值,并返回表示此值的Integer对象。 如果没有具有指定名称的属性 ,如果指定的名称为空或null ,或者该属性没有正确的数字格式 ,则返回null

注意:可以通过System.getProperty(java.lang.String)方法访问系统属性。


使用解决方案:Integer.parseInt / Integer.valueOf

java.lang.Integer.parseInt(String s)将字符串参数解析为带符号的十进制整数 。 字符串中的字符必须全部为十进制数字 ,除了第一个字符可以是ASCII减号'-' ('\u002D')指示负值 。 返回结果整数值,就像将参数和基数10作为parseInt(java.lang.String, int)方法的参数给出一样。

要么

java.lang.Integer.valueOf(String s)返回一个包含指定String值的Integer对象。 该参数被解释为表示带符号的十进制整数 ,就像将参数赋予parseInt(java.lang.String)方法一样。 结果是一个Integer对象 ,表示字符串指定的整数值。
换句话说,此方法返回一个等于值的Integer对象:

 new Integer(Integer.parseInt(s)) 

你应该用

 Integer.parseInt 

在你的代码中

 Integer.getInteger 

将确定具有指定名称的系统属性的整数值。

正确的代码是:

 Integer bestScore = Integer.parseInt(bestMove.get("score"), 10); 

那个10作为第二个参数是基数。 总是使用它,所以你的号码不会被解析。

使用此方法:

 Integer.parseInt(bestMove.get("score")); 

使用Integer.parseInt(String)

请改用Integer.parseInt 。