繁体   English   中英

为什么Java接受带下划线的Long格式,但不使用String解析它?

[英]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解析的数字的工作方式相同。

这是Long.parseLongJavadocs

字符串中的字符必须全部为十进制数字,但第一个字符可以是ASCII减号'-'(\\ u002D')表示负值,也可以是ASCII加号'+'('\\ u002B')来表示。表示正值。

因此,不仅不允许使用下划线,而且还必须使用L后缀。 这并不是要从源代码中解析格式的数字。

在Java 7中引入了数字文字的下划线 ,但这只是为了提高源代码的可读性,而不是为了对字符串进行编程分析。

在Java SE 7和更高版本中,数字文字中数字之间的任何位置都可以出现任意数量的下划线字符(_)。 例如,此功能使您可以将数字文字中的数字组分开,这可以提高代码的可读性。

这些功能是完全独立的,绝不意味着彼此之间是一致的。

您收到的NumberFormatException是预期的,并且可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM