【问题标题】:Integer.valueOf() vs. Integer.parseInt() [duplicate]Integer.valueOf() 与 Integer.parseInt() [重复]
【发布时间】:2011-11-13 09:03:50
【问题描述】:

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

由于两者都不能将, 解析为十进制 千位分隔符(产生NumberFormatException),是否有可用的Java 方法来做到这一点?

【问题讨论】:

  • 我们能否澄清一下,因为您正在处理整数...您是否试图将"1,000,000" 转换为值1000000 的整数?或者像 "123,4" 这样的东西到 123 的 int 值?
  • 想告诉我们哪个整数有小数分隔符? --- 哦,glowcoder 打败了我 ;)
  • @glowcoder 是的,将“1,000,000”转换为值 1000000 的 int 正是我的意思。谢谢!
  • 这是千位分隔符,不是小数分隔符。
  • @KarlKnechtel 实际上取决于你来自哪里。

标签: java string integer decimal-point


【解决方案1】:

其实valueOf在内部使用parseInt。区别在于parseInt 返回一个int 原语,而valueOf 返回一个Integer 对象。从 Integer.class 来源考虑:

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(",", ""));

【讨论】:

  • 谢谢。当我从数据库中提取一个 int 并尝试将它从 String 转换为 Java 中的 int 时,我正在使用 Integer.valueOf 并获得 NullPointerException。不是字符串到整数。我不得不改用 Integer.parseInt()。
  • 使用 fomat 获取值:million.replace(/,/g, "");
【解决方案2】:

这两种方法的区别在于:

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

【讨论】:

    【解决方案3】:

    第一个问题Difference between parseInt and valueOf in 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);
    

    【讨论】:

    • 我相信他的意思是解析"1,000,000" --> (int)1000000,而不是欧洲小数。
    • 如果一个整数有小数,他为什么要解析它? :-)
    • 嗯,当您收集需求时就是这样。 :-)
    • @ateiob 被称为“数字组分隔符”或通常是“千位分隔符”。
    • @glowcoder 就像一个有趣的花絮一样,我认为该分隔符的名称并不是正式的“千种东西”,原因很简单,因为存在其他组中的组号的语言环境(即不是3 秒)。在 Michael Kaplan 的博客上阅读相关内容 - iirc Indian 就是一个例子(我认为他们将其分成 4 对?)。所以“分组分隔符”对国际观众来说是有意义的;)
    【解决方案4】:

    Integer.valueOf() 返回一个整数 object,而Integer.parseInt() 返回一个 int primitive

    【讨论】:

      【解决方案5】:

      parseInt()String 解析为int,而valueOf() 还将此int 包装成Integer。这是唯一的区别。

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

      【讨论】:

        猜你喜欢
        • 2019-03-05
        • 2017-03-11
        • 2012-12-05
        • 2011-09-28
        • 1970-01-01
        • 2015-02-27
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多