为什么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 。