【问题标题】:Why Integer.parseInt() removes 0为什么 Integer.parseInt() 删除 0
【发布时间】:2015-12-02 21:25:52
【问题描述】:

我一直在尝试调查 Integer.parseInt() 删除 0 并返回剩余数字的原因。例如:

@Test
public void testInteger() {
    System.out.println(Integer.parseInt("01234"));
    System.out.println(Integer.parseInt("12340"));
}

第一行打印 1234,第二行打印 12340。为什么从第一行中删除了 0。这根本不符合逻辑。我知道 Integer 是 int 的包装对象,而 int 存储 32 位。

你能解释一下原因吗?

【问题讨论】:

  • 因为没有自然数01这样的东西?还是001?
  • 整数不以零开头。这也是永远不要使用整数来存储电话号码的一个很好的理由。
  • 整数上的前导零实际上只存在于整数的某些表示例如、ASCII 表示,或者可能以固定大小的 CPU 寄存器)。 Integer.parseInt 返回一个整数。它不会从整数中删除任何内容。然后println 使用默认的 ASCII 格式打印整数。如果您想要前导 0,请使用为该格式提供前导零的打印语句。
  • @RajivJain 整数只是一个数字,例如 1 或 10 或 -5。数字前面没有 0,但表示数字的字符串可能。
  • 第一个表达式中的零,一旦转换为整数,就没有意义了。

标签: java integer


【解决方案1】:

因为您使用字符串“01234”作为整数(使用parseInt()),所以system.out.println 正在打印一个整数。

“01234”作为整数将是 1234。这是因为 0 是唯一以零开头的整数。

这些都不是实数:

0456,
0234, 
05555555, 
01

如果您将“01234”存储为字符串,则 0 将保留其值。

【讨论】:

  • 感谢您的帮助。
【解决方案2】:

第一个表达式中的零,一旦转换为整数,就没有意义了。

如果是,01001 之间有什么区别?为什么转换应该以一个不重要的0 结束作为正确的选择,甚至比具有两个重要零的转换更好?那么三个重要的零呢?按照这个逻辑,就更有意义了!!

不,很抱歉,不重要的数字会被删除,这就是为什么字符串'01234'(当然是合法字符串)被转换为整数1234

详情请见here

前导零从不重要。

【讨论】:

  • 在许多语言(甚至 Java)中,前导零非常重要,前导零表示数字是八进制 (0123 = 83)
【解决方案3】:

因为整数不以零开头,所以零在数字整数中不重要,然后在解析Integer.parseInt("01234")时,从字符串到int的0被删除1234。 相反,末尾的零不会被删除12340

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-08
    • 2021-11-27
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多