Java Integer.valueOf()与Integer.parseInt()的比较

Java Integer.valueOf()与Integer.parseInt()的比较,java,string,integer,decimal-point,Java,String,Integer,Decimal Point,除了处理减号(如文档所述)的Integer.parseInt()之外,Integer.valueOf()和Integer.parseInt()之间还有其他区别吗 既然两者都不能将,解析为十进制千位分隔符(产生NumberFormatException),那么有没有现成的Java方法可以做到这一点呢?第一个问题: 第二个问题: NumberFormat format = NumberFormat.getInstance(Locale.FRANCE); Number number = format.

除了处理减号(如文档所述)的
Integer.parseInt()
之外,
Integer.valueOf()
Integer.parseInt()
之间还有其他区别吗


既然两者都不能将
解析为十进制千位分隔符(产生
NumberFormatException
),那么有没有现成的Java方法可以做到这一点呢?

第一个问题

第二个问题

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse("1,234");
double d = number.doubleValue();
DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator('.');
symbols.setGroupingSeparator(',');
df.setDecimalFormatSymbols(symbols);
df.parse(p);
第三个问题

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE);
Number number = format.parse("1,234");
double d = number.doubleValue();
DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator('.');
symbols.setGroupingSeparator(',');
df.setDecimalFormatSymbols(symbols);
df.parse(p);

实际上,
valueOf
在内部使用
parseInt
。区别在于
parseInt
返回一个
int
原语,而
valueOf
返回一个
Integer
对象。从整数类源考虑:

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));
}
至于用逗号进行解析,我不太熟悉。我会给他们消毒

int million = Integer.parseInt("1,000,000".replace(",", ""));
parseInt()
String
解析为
int
,而
valueOf()
将此
int
额外包装为
Integer
。这是唯一的区别


如果您想完全控制解析整数,请使用各种语言环境进行检查。

Integer.valueOf()
返回一个Integer对象,而
Integer.parseInt()
返回一个
int
原语这两种方法之间的区别是:

  • parseXxx()
    返回原语类型
  • valueOf()
    返回该类型的包装器对象引用

我相信他的意思是解析
“1000000”->(int)1000000
,而不是欧洲小数。如果整数有小数,他为什么要解析整数?:-)嗯,当您收集需求时,情况就是这样。:-)@a称为“数字组分隔符”或通常称为“千位分隔符”。@glowcoder作为一个有趣的小道消息,我认为该分隔符的名称并不是正式的“千位某物”,原因很简单,因为存在其他组中的组号所在地(即不是3)。在迈克尔·卡普兰的博客上读到这一点——iirc Indian就是一个例子(我想他们把它分成了4对?)。所以“分组分隔符”对国际观众来说是有意义的;)我们能澄清一下吗,因为你在处理整数。。。您是否试图将
“1000000”
转换为值
1000000
的整数?或者类似于
“123,4”
的内容转换为
123
的int值?请告诉我们哪个整数有十进制分隔符?--哦,glowcoder打败了我;)@glowcoder是的,将“1000000”转换为1000000的整数正是我的意思。谢谢这是千位分隔符,不是十进制分隔符。@KarlKnechtel实际上取决于您来自哪里。谢谢。当我从数据库中提取一个int并试图在Java中将其从字符串转换为int时,我使用Integer.valueOf并获得一个NullPointerException。不是字符串到整数。我不得不切换到Integer.parseInt()。使用fomat作为值:000000.replace(/,/g,”);