为什么数字类上的valueOf / parse方法拒绝Java 7中的有效数字?

问题描述

| 都不强调:
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。)     

解决方法

        我看着Double。我希望其他数字相似: Java 7中的valueOf方法指定的语法与Java 6中的valueOf方法保持不变。Java 7 \'s API特别声明不允许使用下划线。 下划线将允许使用数字文字而不是可解析的字符串。 Java标识符最有可能是@Voo \的意思。     ,        好吧,最重要的是因为您不能仅仅因为感觉到就改变公共API的签名;) 他们可以实现一些其他方法来根据这些新更改来解析浮点数,但是这些方法在那里可以解析数字,而不是java标识符,因此仅是因为语言规范在这方面发生了变化并不意味着解析浮点数/整数应该更改。 另请注意,到目前为止,Integer.valueOf也不接受\“ 0x \”,因此没有理由他们现在应该从此开始。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...