Double.parseDouble和Integer.parseInt之间的行为差​​异

jus*_*Guy 6 java

似乎parseDouble可以接受带有尾随空格的字符串,但是parseInt和parseLong会抛出异常.

例如,对于这个测试用例

@Test
public void testNumberParsing() {
    try {
        Double.parseDouble("123.0 ");
        System.out.println("works");
    }catch (NumberFormatException e) {
        System.out.println("does not work");
    }
    try {
        Integer.parseInt("123 ");
        System.out.println("works");
    }catch (NumberFormatException e) {
        System.out.println("does not work");
    }
    try {
        Long.parseLong("123 ");
        System.out.println("works");
    }catch (NumberFormatException e) {
        System.out.println("does not work");
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是

works
does not work
does not work
Run Code Online (Sandbox Code Playgroud)

为什么行为不同?这是故意的吗?

Swe*_*per 6

实际上记录了这种行为(虽然这是一个非常糟糕的设计......)!

Double.parseDouble:

返回一个初始化为由指定String表示的值的新double,由double类的valueOf方法执行.

Double.valueOf:

s中的前导和尾随空格字符将被忽略.删除空格,就像使用String.trim()方法一样; 也就是说,删除了ASCII空格和控制字符.

Integer.parseInt:

字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号' - '('\ u002D')表示负值或ASCII加号'+'('\ u002B')表示正值.