JDK1.7的发布已经介绍了一些有用的特征,尽管大部分都是一些语法糖,但仍然极大地提高了代码的可读性和质量。其中的一个特征是介绍字面常量数字的下划线。从Java7开始,你就可以在你的Java代码里把长整型数字比如10000000000写成一个更具可读性10_000_000_000。在字面常量数字中加下划线的一个重要的原因是避免一些难以通过看代码来发现的细微的错误。对比10000000000 和1000000000,我们很难发现少了一个0或多了一个0,但对于10_000_000_000和1_000_000_000却不然。所以如果你在Java源码中要处理大数字,你可以在数字中加入下划线来提高可读性。使用的时候要注意:在字面常量数字里加下划线是有一定规则的,下划线只能在数字之间,在数字的开始或结束一定不能使用下划线。在本章节的以下部分,我们将学习如何在字面常量数字中使用下划线,以及在字面常量数字中使用它们的规则。

怎样在Java中有效的给数字使用下划线

正如我之前说的,这不过是个语法糖,非常像字符串在 switch 场景下的实现,这也是使用编译器的帮助下实现的。编译期间,编译器把这些下划线移除,并把真实的数字赋值给变量。比如在编译期间10_000_000将会被转化成10000000。既然CPU在处理长数字上毫无压力,对于我们这些可怜的在处理长数字上有困难的人类来说,就不用为它烦恼了。这个特征尤其在需要处理大数额金钱、信用卡号码、银行账号以及其它需要长账号的银行和金融领域更有用。尽管在写Java文件里写敏感信息很让人沮丧,我们应该永远不要在编码的时候这么做。但在数字中用下划线让我们的生活比以前变得更加简单了。

在Java中给数字加下划线的规则

Java编码语言对给数值型的字面值加下划线有严格的规定。如上所述,你只能在数字之间用下划线。你不能用把一个数字用下划线开头,或者已下划线结尾。这里有一些其它的不能在数值型字面值上用下划线的地方:

在数字的开始或结尾

对浮点型数字的小数点附件

F或L下标的前面

该数值型字面值是字符串类型的时候

这里有一些例子,来表现哪些地方加给数字加下划线有效,哪些地方给数字加下划线无效

float pi1 = 3_.1415F; // 无效的; 不能在小数点之前有下划线

float pi2 = 3._1415F; // 无效的; 不能在小数点之后有下划线

long socialSecurityNumber1 = 999_99_9999_L; //无效的,不能在L下标之前加下划线

int a1 = _52; // 这是一个下划线开头的标识符,不是个数字

int a2 = 5_2; // 有效

int a3 = 52_; // 无效的,不能以下划线结尾

int a4 = 5_______2; // 有效的

int a5 = 0_x52; // 无效,不能在0x之间有下划线

int a6 = 0x_52; // 无效的,不能在数字开头有下划线

int a7 = 0x5_2; // 有效的 (16进制数字)

int a8 = 0x52_; // 无效的,不能以下划线结尾

int a9 = 0_52; // 有效的(8进制数)

int a10 = 05_2; // 有效的(8进制数)

int a11 = 052_; // 无效的,不能以下划线结尾

下面是一些在数字中用下划线的其它示例:

long creditCardNumber = 6684_5678_9012_3456L; // 在编码的时候,最好永远不要这么做

long socialSecurityNumber = 333_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;

使用下划线后,你会发现你的代码比以前可读性更强。顺便说一句,在java中应该一直用L去表示一个长整型数字。尽管用小写的l表示长整型数也是合法的,但他看起来太像1了,所以应该永远都不要用它。告诉我你能不能再 12l和121之间找出差别,我猜能找到的人不多吧。但是在 12L与121之间呢?

总之,要养成在数字中使用下划线的习惯,尤其是对长整型数来说,这样能增加它的可读性。我知道这个功能只是从Java1.7开始才有效,还没有被广泛的使用。但鉴于Java1.8的现状,我期望Java8在Java社区中传播比Java7更加迅速更加广泛。

java 英文数字下划线_为什么Java7开始在数字中使用下划线相关推荐

  1. python变量必须以字母和下划线_【转载】关于python中带下划线的变量和函数的意义...

    Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...

  2. java 多选列表框_快逸报表:填报中的下拉多选列表框

    在快逸报表应用的填报页面中,下拉框是最常见的了.下拉选择框可以简化用户的输入,可以避免用户的错误录入,还可以轻松实现中文与代码的映射关系,可谓用途多多. 可是随着业务的越来越复杂,各种奇怪的需求均可能 ...

  3. java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题

    在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...

  4. java能下划线开头_为什么Java7开始在数字中使用下划线

    JDK1.7的发布已经介绍了一些有用的特征,尽管大部分都是一些语法糖,但仍然极大地提高了代码的可读性和质量.其中的一个特征是介绍字面常量数字的下划线.从Java7开始,你就可以在你的Java代码里把长 ...

  5. word行首空格下划线_在Word文档行首空格和下划线问题的解决

    利用Word制作试卷,经常用下划线画空格线(用作填空),常出现这样的问题:到一行将结束时,用下划线画一条填空线,但此下划线上不够填写内容的位置,必须将下划线延续到下一行.此时,继续上一行下划线的操作, ...

  6. python数字华容道算法_用React写一个数字华容道,你需要知道的秘密

    还在上班?很无聊? 这个叫前言 年末了.哦,不,要过年了.以前只能一路站到公司的我,今早居然是坐着过来的.新的一年,总要学一个新东西来迎接新的未来吧,所以选择了一直未碰的那个据说是全宇宙最牛逼的前端框 ...

  7. java json 下划线_为什么rest接口返回json建议采用下划线形式,不要用驼峰

    今天被数据大神说了,对接第三方接口返回的json字段我想用驼峰形式,他说我这样不专业.所以就改了,认怂. 记住以后再次对接rest接口,返回的字段用下划线形式 记录一下改的内容 1.使用fastjso ...

  8. oracle 文本下划线_字体真棒文本装饰和链接下划线

    oracle 文本下划线 If I were to describe Font Awesome in a word, I think it would be...awesome.  The icon ...

  9. 输入文字加下划线_微信昵称这样设置,文字加上下划线!

    Hi 大家好 我是机哥 今天是周末,最近有小伙伴问,微信带线的昵称是怎样设置的,其实很简单,我们先来看一下. 就是在文字的下面加一条下划线,感觉还是挺与众不同的,这个文字大家可以聊天使用,也可以设置微 ...

最新文章

  1. JSF, MyFaces, RichFaces 和 Facelets的区别
  2. 原型共享数据 原型简单语法 原型中方法是可以相互访问 实例对象属性方法层层搜索
  3. 【移动端vue ui框架学习】vue项目如何使用基于vue的UI框架mint ui
  4. qtdesigner设计表格_实例9 利用Qt Designer设计一个对话框
  5. 14 [虚拟化] 虚存抽象;Linux进程的地址空间
  6. iphone7尺寸_iPhone 12 mini、12 Pro Max真机对比图赏:尺寸直观感受下
  7. 分数线划定(洛谷-P1068)
  8. 吴昊品游戏核心算法(新年特别篇)——另类取石子游戏(斐波那契博弈)
  9. python slice和列表切割_Python 列表切边 slice
  10. Wiener维纳滤波基本原理及其算法实现
  11. 贴片钽电容的封装、尺寸和标…
  12. linux pptpd无法访问内网,Linux系统中Starting pptpd无法运行的解决办法
  13. 【springcloud】功能尝试(二)熔断器的三个功能
  14. hdmi接口有什么用_电脑上的Type-C接口到底有什么用呢
  15. 【Java 数据结构 算法】宁可累死自己, 也要卷死别人 12 红黑树
  16. 【高项】各章节知识点概括
  17. [驱动] TM1729
  18. cac会议投稿难度大吗_【CAC2018】2018中国自动化大会论文及注册相关问题答复(QA)...
  19. 马云鹤:淡然行走,一路从容
  20. 图像模式识别 (二)

热门文章

  1. 关联Left Outer Join的第一条记录
  2. fileziller 恢复 站点管理器 内的ftp帐号方法
  3. 《不要做浮躁的嵌入式工程师》观后感
  4. RIP-OSPF-EIGRP 相互再发布
  5. exchange2003 SMTP连接器的应用案例
  6. 参加了博客园北京俱乐部4月4日的活动-Nice
  7. Oracle弱智100问
  8. c语言正则表达式库,c语言正则表达式库--PCRE
  9. java 流常用接口_java 8新特性5--使用集合流式API
  10. java 中 class 对象_java中Class对象详解