Javaにおいて数値リテラル内にアンダースコアを書く理由
についてまとめました。
なぜアンダースコアを書くのか
一言でいうと
数値リテラルの桁の集まりを分離することで、コードの可読性を向上させることができるからです。
例えば、下記の2つの宣言は同義になります。
int i1 = 123456789;
//アンダースコアを挿入した変数
int i2 = 123_456_789;
//2つの変数が正しいか確認する
System.out.println(i1 == i2);
true
【説明】
Java 7以降、プリミティブな数値リテラルの数字のグループを区切るために、1以上のアンダースコア「_ 」を使用して可読性を向上させることができました。
重要なことなので先にいうと、配置の出来ないルールが大まかに2つあります。
- リテラルの先頭と末尾には記述ができない
- 記号の前後には記述ができない
細かなルールについては下記で説明する。
アンダースコアを配置できる場所
アンダースコアを配置できるのは桁の間のみです。
アンダースコアを配置できない場所
次の場所にアンダースコアを配置することはできません。
- 数値の先頭または末尾
- 浮動小数点リテラルの小数点の隣
-
F
またはL
接尾辞の前 - 数字の文字列が想定されている場所
数値の先頭または末尾
番号の先頭または終わりに、配置することは出来ません
_123_456_789 または 123_456_789_ など
浮動小数点リテラルの小数点の隣
リテラル浮動小数点の小数点に隣接して、配置することは出来ません
1._23 または 3_.1415F など
F
またはL
接尾辞の前
FまたはL接尾辞に先立ち配置することは出来ません
9999999_L または 999_99_9999_L など
数字の文字列が想定されている場所
数字の文字列が期待されている位置で、配置することは出来ません
0_xFFFF など
【まとめ】
厳密には4つのルールがあるが、まずは以下の2点を覚えておこう。
- リテラルの先頭と末尾には記述ができない
- 記号の前後には記述ができない