1

都没有下划线:

scala> java.lang.Float.valueOf("1_2_3.4_5_6")
java.lang.NumberFormatException: For input string: "1_2_3.4_5_6"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1242)
    at java.lang.Float.valueOf(Float.java:416)

二进制文字也不起作用:

scala> java.lang.Byte.valueOf("0b01010101")
java.lang.NumberFormatException: For input string: "0b01010101"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Byte.parseByte(Byte.java:148)
    at java.lang.Byte.valueOf(Byte.java:204)
    at java.lang.Byte.valueOf(Byte.java:230)

这些方法没有针对 Java 语言的更改进行更新的原因是什么?

(我实际上正在使用 OpenJDK 64 位服务器 VM,Java 1.7.0_136-icedtea。)

4

2 回答 2

3

我看着双。我希望其他数字是相似的:

Java 7 中valueOf方法指定的语法与Java 6 中的valueOf方法没有变化。Java 7 的 API 特别声明不允许使用下划线。

数字文字中允许使用下划线,而不是可解析的字符串。这很可能是 @Voo 的 java 标识符含义。

于 2011-06-23T20:00:25.907 回答
0

最重要的是,您不能仅仅因为您喜欢就更改公共 API 的签名;)

他们可以实现一些额外的方法来根据这些新的变化来解析浮点数,但是这些方法是用来解析数字的,而不是 Java 标识符,所以仅仅因为语言规范在这方面发生了变化并不意味着解析浮点/整数应该改变。

另请注意,到目前为止,Integer.valueOf 也没有接受“0x”,因此没有理由现在就应该从它开始。

于 2011-06-23T19:37:22.010 回答