Integer.valueOf()与Integer.parseInt()

ate*_*iob 174 java string integer decimal-point

除了Integer.parseInt()处理减号(如文件所述),Integer.valueOf()和之间是否还有其他差异Integer.parseInt()

因为两者都不能解析,十进制千位分隔符(产生NumberFormatException),有没有一个已经可用的Java方法来做到这一点?

cor*_*iKa 221

实际上,内部valueOf使用parseInt.不同之处在于返回一个对象时parseInt返回一个int基元.从Integer.class源代码中考虑:valueOfInteger

public static int parseInt(String s) throws NumberFormatException {
    return parseInt(s, 10);
}

public static Integer valueOf(String s, int radix) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, radix));
}

public static Integer valueOf(String s) throws NumberFormatException {
    return Integer.valueOf(parseInt(s, 10));
}
Run Code Online (Sandbox Code Playgroud)

至于用逗号解析,我对它不熟悉.我会消毒它们.

int million = Integer.parseInt("1,000,000".replace(",", ""));
Run Code Online (Sandbox Code Playgroud)


Mar*_*aux 29

第一个问题:java中parseInt和valueOf的区别?

第二个问题:

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse("1,234");
double d = number.doubleValue();
Run Code Online (Sandbox Code Playgroud)

第三个问题:

DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator('.');
symbols.setGroupingSeparator(',');
df.setDecimalFormatSymbols(symbols);
df.parse(p);
Run Code Online (Sandbox Code Playgroud)

  • @ateiob称为"数字组分隔符"或通常称为"千位分隔符". (4认同)
  • 嗯,这就是你收集需求时的情况.:-) (2认同)
  • @glowcoder就像一个有趣的花絮一样,我认为该分隔符的名称并不是官方的"数以千计的东西",原因很简单,就是那里有其他组中的组编号(即不是3组).在迈克尔卡普兰的博客上阅读有关这一点 - iirc Indian就是一个例子(我认为他们将它分成4对吗?).所以"分组分隔符"对国际观众来说是有意义的;) (2认同)

Joe*_*Joe 21

Integer.valueOf()返回一个Integer 对象,同时Integer.parseInt()返回一个int 原语.


Tom*_*icz 8

parseInt()解析StringintvalueOf()另外包装此intInteger.这是唯一的区别.

如果您想完全控制解析整数,请查看NumberFormat各种语言环境.


小智 8

这两种方法的区别在于:

  • parseXxx() 返回基元类型
  • valueOf() 返回该类型的包装器对象引用.