为了账号安全,请及时绑定邮箱和手机立即绑定

数字文字中的Java 7下划线

/ 猿问

数字文字中的Java 7下划线

元芳怎么了 2019-10-18 15:02:16

当我们必须使用a _分隔数字中的数字时,我无法理解以下无法使用的情况:


在需要一串数字的位置


(作为记录了JDK7指南这里)


一些例子?


查看完整描述

3 回答

?
当年话下

你不具备使用“_”,你可以。提案中提供的示例包括信用卡号,电话号码或仅在代码中使用分隔符的数字。


对于“在期望数字串的位置”,它只是在应该以数字开头(或结束)的地方。这里有些例子。


请注意,根据此建议,下划线只能放在数字之间。不能将它们自己放置在通常期望数字串的位置:


int x1 = _52; //这是一个标识符,而不是数字文字。


int x2 = 5_2; // 好。(十进制文字)


int x2 = 52_; //非法。(下划线必须始终在数字之间)


int x3 = 5_______2; // 好。(十进制文字。)


int x4 = 0_x52; //非法。不能在“ 0x”基数前缀中添加下划线。


int x5 = 0x_52; //非法。(下划线必须始终在数字之间)


int x6 = 0x5_2; // 好。(十六进制文字)


int x6 = 0x52_; //非法。(下划线必须始终在数字之间)


int x6 = 0x_; //非法。(删除下划线时无效)


int x7 = 0_52; // 好。(八字)


int x7 = 05_2; // 好。(八字)


int x8 = 052_; //非法。(下划线必须始终在数字之间)


查看完整回答
反对 回复 2019-10-18
?
德玛西亚99

如用Javadoc编写的:


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


例如,如果您的代码包含许多数字,则可以使用下划线字符将数字分成三组,类似于使用逗号或空格等标点符号作为分隔符的方式。


long creditCardNumber = 1234_5678_9012_3456L;

long socialSecurityNumber = 999_99_9999L;

float pi =  3.14_15F;

long hexBytes = 0xFF_EC_DE_5E;

long hexWords = 0xCAFE_BABE;

long maxLong = 0x7fff_ffff_ffff_ffffL;

byte nybbles = 0b0010_0101;

long bytes = 0b11010010_01101001_10010100_10010010;


查看完整回答
反对 回复 2019-10-18
?
蛊毒传说

好像有人杀死了原始帖子(OP)中的URL。这是整个讨厌的URL,以防万一某些格式设置功能再次杀死它:


http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html


您要说的那个页面的具体报价如下:


您只能在数字之间添加下划线;您不能在以下位置放置下划线:


在数字的开头或结尾


与浮点文字中的小数点相邻


在F或L后缀之前


在需要一串数字的位置


顺便说一句,为了使自己尽可能的贴切,应该提到第三点,您也不能在D后缀之前使用下划线,如以下示例所示:


double trouble = 123.456_D;  //fail

float myBoat = 321.123_F;  //fail

long winded = 90210_L;  //fail

我也觉得第三点很奇怪。我的意思是,大部分情况下,前三点都涵盖了所有情况,那么他们所说的这个神秘的“数字字符串”又是什么呢?前三个要点实际上并没有解决强迫他们添加这个神秘的第四个要点?


最初,我以为他们是在谈论十六进制表示法或二进制表示法,其中期望在b或x后面有一个数字,就像下面的示例不起作用一样:


byte size = 0_b111101;  //fail

byte me = 0b_111101;  //fail

int hexed = 0_x_BABE;  //fail

不过,我认为从技术上讲,这可能与第一点相同,因为第一点说下划线不能在数字的开头。但是可以肯定的是,使用二进制或十六进制时,期望在“ b”或“ x”之后出现“数字字符串”,对吗?因此,如果我是一名博彩玩家,我可能会在二进制/十六进制方案中投入一些资金。但是我还有另一种可能的情况,我可以对冲我的赌注。来了


就个人而言,我希望Java中有一条规则,规定您在谈论java.lang.String时只能使用单词“ string”。允许术语“字符串”保留其行人含义会引起混淆,这是一个完美的例子。


现在,如果第四点说的是“期望在数字的java.lang.String的位置”,我可能得出的结论是,他们正在谈论表示需要解析的数字的实际java.lang.String对象。因此,采用这段代码:


int i = Integer.parseInt("123_456");

会编译吗?那会跑吗?它将很好地编译,但是当然,parseInt方法需要数字的java.lang.String,并且对该数字java.lang.String的验证或解析将在运行时触发以下错误:


线程“主”中的异常java.lang.NumberFormatException:对于输入字符串:java.lang.Integer.parseInt(Integer.java:492)处的java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)处的“ 123_456” Tester.main(Tester.java:7)上的java.lang.Integer.parseInt(Integer.java:527)


当然,这是一个运行时错误,并且看来Oracle文档确实在谈论将在编译时标记的错误。但这肯定是一个预期的“数字字符串”的情况。


现在,如果只有Oracle文档是Wiki格式的。它可能会诱使我进入并添加如下内容:


您只能在数字之间添加下划线;您不能在以下位置放置下划线:


在数字的开头或结尾


与浮点文字中的小数点相邻


在后缀“ F”,“ L”或“ D”之前(我添加了“ D”)


十六进制和二进制标记“ x”和“ b”之前或之后


而且,如果您向方法提供的java.lang.String除了数字以外什么也不希望,则期望幕后使用的解析算法会抛出运行时异常。


顺便说一句,我刚刚在TheServerSide上写了一篇有关该主题的小文章。随意看看。本文旨在达到Oracle认证专家Java 7 Programmer认证目标,但这是一篇非常全面且易于阅读的文章,只是大体上解释了使用下划线的规则。


OCPJP认证:带下划线的数字文字需要了解的内容


希望能有所帮助。


查看完整回答
反对 回复 2019-10-18

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信