前頁に続き、プリミティブ型のリテラル文字について説明します。
プリミティブ型の変数を初期化するときに
new
キーワードが使用されていないことに気づからたことかと思います。
プリミティブ型は、言語に組み込まれた特別なデータ型です。
クラスから作成されたオブジェクトではありません。
リテラルは、固定値のソースコード表現です。
リテラルは計算を必要とせずにコード内に直接表されます。
引用元: Oracle社本家サイトデータ型より引用
整数型の接尾語に英太文字
L
を付与することでlong型を示します。英小文字「l」も同様にlong型を示しますが、数字の「1」と間違い易いので英太文字をお勧めします。
整数型byte、short、int、およびlongの値は、intリテラルから作成できます。
intの範囲を超えるlong型の値は、longリテラルから作成できます。
整数リテラルは、次の数値システムで表現できます。
- Decimal: 10進法表記で0から9までの数字で構成されています。
- Hexadecimal: 16進法表記で0から9までの数字とAからFまでの英字で構成されています。
- Binary: 2進法表記で0から1までの数字で構成されています。(java7から)
プレフィックス
0x
は16進数を示し、0b
はバイナリを示します。引用元: Oracle社本家サイトデータ型より引用
// 数値26を10進法表記にしたint型
int decVal = 26;
// 数値26を16進法表記にしたint型>
int hexVal = 0x1a;
// 数値26を2進法表記にしたint型
int binVal = 0b11010;
// 数値26を10進法表記にしたlong型
long decLongVal = 26L;
// 数値26を16進法表記にしたlong型
long hexLongVal = 0x1aL;
// 数値26を2進法表記にしたlong型>
long binLongVal = 0b11010L;
float型の接尾語に英文字
F
又はf
を付与することでfloat型を示します。double型の接尾語に英文字
D
又はd
を付与することでdouble型を示します。仮数部と指数部の間に英文字
E
またはe
を挟み小数点以下を示します。
E
またはe
以降に示される指数部の数値は、10進法表記になります。引用元: Oracle社本家サイトデータ型より引用
//倍数精度浮動小数点表記
double d1 = 123.4;
//指数部10の2乗を指定しているので100倍になりd1と同じ値になります。
double d2 = 1.234e2;
double d3 = 123.4D;
double d4 = 123.4d;
double d5 = 1.234e2D;
//単数精度浮動小数点表記
float f1 = 123.4f;
float f2 = 123.4F;
float f3 = 1.234e2f;
float f4 = 1.234e2F;
//全て同じ値を示しています。
//Avogadro's constant アボガドロ定数 6.02214086 × 1023(単位: mol−1)
//仮数部と指数部の分離が重要なのは、化学、物理、数学などの定数をそのまま正確に表現するためです。
public static double CONST_AVODADRO = 6.022140857e23;
Java7から数値区切り文字のリテラル文字「_」(半角ハンダースコア)がリリースされました。
例えば日本では、金額などの表記に「,」(カンマ)で3桁区切で区切ります。
それをJava7以降のJavaソースファイルに「_」で表現できるようになりました。
このリテラル文字に禁止事項があります。
- 数値の接頭語、接尾語に記述できません。
NGな例1) long test1 = _1234_5678
NGな例2) long test2 = 1234_5678_- 少数点前後に記述できません。
NGな例3) float float pi1 = 3_.1415F;
NGな例4) float float pi2 = 3._1415F;
- 浮動小数点(float,dobule)のリテラル文字(L,F)の前に記述できません。
NGな例5) float float pi3 = 3.1415_F;
NGな例6) long socialSecurityNumber1 = 999_99_9999_L;
- 整数リテラル文字(0x,0b)の文字間に記述できません。
NGな例7) int x1 = _0x52; (※.例1に該当)
NGな例8) int x2 = 0_x52; (※.中に記述)
NGな例9) int x3 = 0x_52; (※.例1に該当)
NGな例10) int x4 = 0x52_; (※.例2に該当)
//符号付整数型の例 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;
引用元: Oracle社本家サイトデータ型より引用
プリミティブ型のcharと参照型のStringクラスのリテラル文字は同じ表記で表現します。
プレミティブ型のchar及びStringクラスのリテラル文字には、Unicode(UTF-16)の文字を含めることができます。
テキストエディタのJavaソースファイルの文字コードをUnicode(UTF-16)を指定している場合には,
直接Unicodeのリテラル文字を指定できます。それ以外の場合には、「¥u0108」(Ĉ)のように示します。この接頭語「¥」を「Unicodeエスケープ」文字と呼びます。
文字リテラルには常に「一重引用符」('[シングルクオテーション])を使用し、
文字列リテラルには「二重引用符」("[ダブルクオテーション])を使用します。引用元: Oracle社本家サイトデータ型より引用
SJIS文字をUnicodeの対応表は、ASH Unicode対応表をご確認下さい。
Stringクラスのデフォルト値は、nullになります。
//Unicode文字(÷)をchar型で指定
//SJISとUnicodeの変換コードを確認します。
char division_ja = '¥u00F7';
//Unicode文字(÷)をString型で指定
String division2_ja = "¥u00F7";
//char型の示し方
char sampleChar = 'あ';
//Stringの定義の仕方
String sampleString = "あいうえお";
//Stringの変数初期値未指定時はnullになります。
String sampleStringNull;
エスケープ文字とは他の文字と異なり、プログラムの文法上エスケープシーケンスを用いて明示的に表現する必要がある文字の事を意味します。
以下にJavaプログラミング言語のchar型及びStringにおけるエスケープ文字を示します。
表記文字 | 和名 | エスケープシーケンス |
---|---|---|
backspace | バックスペース | ¥b |
tab | 水平タブ | ¥t |
line feed(LF) | 改行 | ¥n |
form feed | 書式送り | ¥f |
carriage return(CR) | 復帰 | ¥r |
double quote | ダブルクオテーション | ¥" |
single quote | シングルクオテーション | ¥' |
backslash | バックスラッシュ | ¥¥ |
テキストファイル内の改行コードのデフォルト値は、OSにより異なります。
改行コード | OS | エスケープ文字 |
---|---|---|
<LF> | UNIX | ¥n |
<LF> | Linux | ¥n |
<CR><LF> | Windows | ¥r¥n |
<LF> | Android OS | ¥n |
Android OS はLinuxカーネルをベースに構築されたOSなので、Linuxとデフォルト値が一致しています。
大規模なWebシステムでは、テキストファイル(*.csv,*.txt,*.datなど)の改行コードの取り決めがとても重要になります。
設計段階のファイルのフォーマットを確定するときに文字コード、フォーマット、改行コード、最大長などについて確定します。
設計段階でここの定義が甘いと開発時に結構色々と手戻りが発生します。そのため、設計者は開発者がファイルの読取り及び出力機能を製造するまでにそのファイルの要件を確定する責務があります。