[英]Why does java accept Long format with underscore, but it doesn't parse it using String?
我知道以下事实: long val = 1_000_000L;
在Java中是有效的,但是我发现没有说服力的是Long#parseLong
方法的行为,如果将它作为String
传递,则它不会解析此格式,我尝试了以下代码,但总是得到异常:
String h = "1_000_000L";
long val = 1_000_000L;
System.out.printf("this a valid format : %d\n", val);
try {
Long m = Long.parseLong(h);
System.out.println(m);
} catch (NumberFormatException e) {
System.out.printf("cannot parse this number : %s\n", h);
}
注意 我正在构建类似个人Java编译器的工具,并且我希望它能够工作而不摆脱下划线格式。
从来没有要求您可以在源代码中键入的数字文字与从String
解析的数字的工作方式相同。
字符串中的字符必须全部为十进制数字,但第一个字符可以是ASCII减号'-'(\\ u002D')表示负值,也可以是ASCII加号'+'('\\ u002B')来表示。表示正值。
因此,不仅不允许使用下划线,而且还必须使用L
后缀。 这并不是要从源代码中解析格式的数字。
在Java 7中引入了数字文字的下划线 ,但这只是为了提高源代码的可读性,而不是为了对字符串进行编程分析。
在Java SE 7和更高版本中,数字文字中数字之间的任何位置都可以出现任意数量的下划线字符(_)。 例如,此功能使您可以将数字文字中的数字组分开,这可以提高代码的可读性。
这些功能是完全独立的,绝不意味着彼此之间是一致的。
您收到的NumberFormatException
是预期的,并且可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.