Javaのデータ型でのメモ
はじめに
Java Silverの勉強をちまちまやっているんですが、そんな細かい仕様知らねえよ、そんな実装しねえよ!!!っていうところをついてくるのが、この試験のポイントなのかもしれません。お勉強をしていたら、わりと初めて知ることが多かったので記録しておきます。まずはデータ型について。
2進数、8進数、16進数で整数リテラルで記述する
public class test { public static void main (String[] args){ int BinaryNumber = 0b00001; // 2進数 int Octal = 077777; // 8進数 int Hexadecimal = 0xFFFFF; // 16進数 System.out.println(BinaryNumber); // 1 System.out.println(Octal); // 32767 System.out.println(Hexadecimal); // 1048575 } }
接頭辞として2進数なら0b、8進数なら0、16進数なら0xと記述すると、上記のように表現できます。Java SE 7で導入されたらしいのですが、正直覚える必要あるのかはよくわかりません。知ってたらいいなレベルな気がします。
ちなみに、
public class test { public static void main (String[] args){ int BinaryNumber = 0b00002; // 2進数 System.out.println(BinaryNumber); // ←ねえよ!!! } }
と書いてコンパイルすると、
Exception in thread "main" java.lang.Error: Unresolved compilation problem: トークン "2" に構文エラーがあります。このトークンを削除してください at javaPractice.test.main(test.java:7)
2進数は{0,1}のいずれかでしか表現できないため、0b00002はエラーとなります。
次。
アンダースコアを用いた整数リテラルの表記
整数リテラルの表記について。こちらもJava SE 7で導入されたもので、桁数の多い数値リテラルの可読性を向上させるために、アンダースコア(_)を用いた記述ができるとのこと。ただし、
- リテラルの先頭、末尾には記述できない
- 記号の前後には記述できない
のルールがあります。
サンプル:
public class test { public static void main (String[] args){ int a = 123_456_789; int b = 5_________2; // int c = _123_456_789; <= _がリテラルの先頭にあるのでダメ // int d = 123_456_789_; <= _がリテラルの末尾にあるのでダメ // float e = 3_.1415F; <= _が記号(.)の前にあるのでダメ // long f = 999_99_9999_L; <= _が記号(L)の前にあるのでダメ byte g = 0b0_1; int h = 0_52; //int i = 0x_52; <= _が記号(x)の後ろにあるのでダメ System.out.println(a); // 123456789 System.out.println(b); // 52 System.out.println(g); // 1 System.out.println(h); // 42 } }
桁数の多い整数リテラルなら、可読性向上のためにアンダースコアを用いた表記はありかなと思いました。わりと使えそうですね。もちろん、そういうお作法ができることを知っている人たちが多ければ、なんですが。