`

数字中的下划线

 
阅读更多

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下标的前面
  • 该数值型字面值是字符串类型的时候

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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_; // 无效的,不能以下划线结尾

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

1
2
3
4
5
6
7
8
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更加迅速更加广泛。

原文链接: javacodegeeks 翻译: ImportNew.com 刁 文阳
译文链接: http://www.importnew.com/12998.html

分享到:
评论

相关推荐

    正则表达式只可以输入只允许输入中文、数字、字母、下划线

    ### 正则表达式知识点详解...对于特定的需求,比如本例中的限制字符串只能包含中文、数字、字母和下划线,我们可以构建出精确的正则表达式,并通过编程语言来实现这些功能。这对于数据验证、格式化等应用场景非常有用。

    用户名只允许字母、数字、下划线组成,首位只能为字母(6-20字符)

    - 这意味着首位不能是数字或下划线,只能是A-Z或a-z中的任意一个字母。 3. **长度限制**:用户名的长度必须在6到20个字符之间。 - 最短长度为6个字符。 - 最大长度为20个字符。 #### 正则表达式实现 为了实现...

    PHP 正则表达式匹配汉字、字母、数字、下划线

    PHP 正则表达式匹配汉字、字母、数字、下划线

    PHP正则匹配中英文、数字及下划线的方法【用户名验证】 原创

    这里的`$username`变量代表一个输入的用户名字符串,它包含了中英文字符、数字、下划线以及一些特殊符号。当我们使用`preg_match()`函数配合上述正则表达式进行匹配时,特殊符号如`@`、`#`、`^`和`&`等都不符合匹配...

    .net中textbox下划线

    总的来说,实现.NET中的TextBox下划线效果,可以结合自定义绘制和密码箱控件的特性,根据具体需求选择合适的方法。在开发过程中,理解控件的底层工作原理以及如何扩展其功能是非常重要的,这有助于创建出符合设计...

    驼峰转下划线、下划线转驼峰的java工具类

    不支持数字处理:以上实现并未专门针对带有数字的命名做特殊处理,若存在驼峰命名中含有数字的情况,转换效果可能不是最佳。 未优化复杂场景:在大量字符串处理时,如果字符串长度较大,可能有进一步优化空间,...

    C#下划线样式控件(TextBox,ComBox)和进度条显示文字控件(喊源码)

    这样,用户不仅可以直观地看到进度条的填充,还能读取具体的进度数字。 在实现这些自定义控件时,我们需要注意以下几点: 1. 性能优化:自定义控件的重绘应尽可能高效,避免不必要的计算和绘制操作。 2. 可访问性:...

    DigitAL:一个简单的应用程序(从竖线和下划线中)解析数字并显示由数字形成的数字

    一个简单的应用程序(从竖线和下划线中)解析数字并显示数字/由数字形成的数字。 该应用程序将采用输入流(可以是文件),该输入流具有由管道和下划线组成的原始帐号(可能从数字机读取),每行上都有一个帐号。 ...

    js正则表达式匹配数字字母下划线等

    1、一个正则表达式,只含有汉字、数字、字母、下划线不能以下划线开头和结尾: ^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$ 其中: ^ 与字符串开始的地方匹配 (?!_) 不能以_开头 (?!.*?_$) 不能以_结尾 [a-zA-Z0-...

    python打印田字格程序2

    在Python编程中,这个任务要求我们创建一个程序,该程序能生成一个由随机字符组成的“田”字格图形,字符包括26个英文字母(大小写)、数字和下划线,并统计每种字符出现的频率,结果保存在一个字典中。下面是详细的...

    input只能输入数字英文字母汉字

    - `[^\w\.\/]` 表示匹配除了单词字符(即字母、数字和下划线)、点号、斜杠之外的所有字符。 - 使用 `replace` 方法删除这些字符。 **示例6:允许特定英文单词和数字** ```html (/[^\d|chun]/g,'')"> ``` **解析*...

    Android-VerifyEditText-带下划线的验证码输入框

    同时,为了增加可定制性,开发者还可以为VerifyEditText提供属性,比如下划线的颜色、宽度、间距等,使得组件能够更好地融入到各种不同的应用主题中。这些属性可以通过Android的XML资源文件来设置,或者在代码中动态...

    word下划线怎么输入.docx

    下划线在实际应用中非常重要,例如,在申请用户名的时候,网站会建议使用下划线,可以不予理会的,可以只用字母和数字。下划线也常被用作验证码,验证码都是字母或者数字组合而成的。 输入下划线是非常简单的,只...

    JavaScript 实现判断输入的内容是否为字母数字下划线

    JavaScript 实现判断输入的内容是否为字母数字下划线

    mybaits数据库下划线转java对象的驼峰.pdf

    这将启用 MyBatis 的自动命名转换功能,从而将数据库中下划线命名的表和字段转换为 Java 对象的驼峰命名。 方法二:在 Spring Boot 应用程序中添加配置 在 Spring Boot 应用程序的配置文件 `application.yml` 中...

    python打印由1中列表的内容构成一个“田”字格图形,长度可任意指定输入。

    本程序主要实现的功能是生成一个“田”字格图形,并统计其中各种字符(包括26个英文字母的大写和小写形式、数字0-9以及下划线“_”)出现的次数。 ### 二、程序设计思路 1. **随机字符生成**:通过Python内置的`...

    javascript正则匹配汉字、数字、字母、下划线

    javascript正则检测只含有汉字、数字、字母、下划线不能以下划线开头和结尾 遇到一个用户名检测的的问题,查了一下,总结例子如下: 代码如下:var reg = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$/;if (!reg....

    在Java中使用下划线分隔数的字面值的用法讲解

    在Java编程语言中,自Java 7版本开始引入了一些新的特性,其中一项就是允许开发者使用下划线(_)作为分隔符来增强数字字面量的可读性。这个特性使得长数字更容易被人类阅读和理解,尤其是在处理大整数或者复杂的...

    QQ昵称下划线(内含代码)

    本教程将详细介绍如何在QQ中创建带有下划线的昵称,并提供相关代码。 首先,QQ昵称中的下划线通常不是通过传统键盘输入的,因为标准的英文键盘上并没有直接对应下划线的按键。为了在QQ昵称中添加下划线,我们需要...

Global site tag (gtag.js) - Google Analytics