为什么Integer.getInteger不起作用?

Rom*_*man 20 java string integer

我有以下代码:

game.log.fine("HERE" + bestMove.get("score"));
Integer bestScore = Integer.getInteger(bestMove.get("score"));
game.log.fine("THERE" + bestScore);
Run Code Online (Sandbox Code Playgroud)

作为输出我有:

FINE: HERE50
Dec 9, 2010 11:34:17 AM game.Agent getCloud
FINE: THEREnull
Dec 9, 2010 11:34:17 AM game.Agent getCloud
Run Code Online (Sandbox Code Playgroud)

可能我不得不补充一点,bestMove是HashMap<String,String>.

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

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

Val*_*her 37

因为Integer.getInteger不是你要找的东西.来自Javadoc:

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

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

你想用 Integer.parseInt

  • 卓越的功能命名. (12认同)

aio*_*obe 10

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

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

用法示例:

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

Integer.getInteger做了完全不同的:

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


Buh*_*ndi 10

我会用这个Integer.valueOf(String n)方法.

Integer bestScore = Integer.valueOf(bestMove.get("score"));
Run Code Online (Sandbox Code Playgroud)

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

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

  • 不要在内部使用`valueOf`它是`Integer.valueOf(parseInt(s,10))'...其中`parserInt()`只是`Integer.parseInt(String)`,带基数**10** (2认同)