論理型
boolean
true
/false
の二値。2値を表すのには1ビットで十分だが、実装上の内部表現については明確に定められていないらしい。
- リテラル表現は
true
、false
- 比較式の評価結果は論理値を持つ
- 他の型へはキャストできない
1 2 3 4 5 6 7 8 |
boolean boolTrue = true; boolean boolFalse = false; System.out.println(boolTrue); // true System.out.println(boolFalse); // false System.out.println(1 == 1); // true System.out.println(1 == 0); // false。 |
数値型(整数型)
byte
8ビットの符号付き2進数で表現可能な整数で、範囲は−128~127。内部表現のサイズは1バイト。
byte
型で表現可能な最大値127を超えると8ビット目が1となって負数になるbyte
型で表現された−1(0b11111111
)の演算結果がこれを超える場合、9ビット目以上が無視される- 符号なしで8ビット目が1となるリテラル(
0b1000000
、0x80
)以上の数はint
型で解釈され、byte
型へのキャストが必要- 8ビット目が1のリテラルを
byte
型にキャストした場合、負数とみなされる
- 8ビット目が1のリテラルを
1 2 3 4 5 6 7 8 9 10 |
byte b = 0; // 0はそのままbyteとして解釈される System.out.println(b); // 0 b = 0b01111111; // byte型の正数上限 System.out.println(b); // 127 System.out.println(++b); // byte型では負数となり-128 b = (byte)0b11111111; // int型の正数として解釈→キャストが必要 System.out.println(b); // -1 System.out.println(++b); // byte型の範囲で循環して0 |
short
16ビットの符号付き2進数で表現可能な整数で、範囲は−32768~32767(約3万)。内部表現のサイズは2バイト。
short
型で表現可能な最大値32767を超えると16ビット目が1となって負数になるshort
型で表現された−1(0bffff
)の演算結果がこれを超える場合、17ビット目以上が無視される- 符号なしで16ビット目が1となるリテラル(
0x8000
)以上の数はint
型で解釈され、short
型へのキャストが必要- 16ビット目が1のリテラルを
short
型にキャストした場合、負数とみなされる
- 16ビット目が1のリテラルを
1 2 3 4 5 6 7 8 9 10 |
short s = 0; // 0はそのままshortとして解釈される System.out.println(s); // 0 s = 0x7fff; // short型の正数上限 System.out.println(s); // 32767 System.out.println(++s); // short型では負数となり-32768 s = (short)0xffff; // int型の正数として解釈→キャストが必要 System.out.println(s); // -1 System.out.println(++s); // short型の範囲で循環して0 |
int
32ビットの符号付き2進数で表現可能な整数で、範囲は−2147483648~2147483647(約21億、109オーダー)。内部表現のサイズは4バイト。
int
型で表現可能な最大値2147483647を超えると最上位ビットが1となって負数になるint
型で表現された−1(0bffffffff
)の演算結果がこれを超える場合、33ビット目以上が無視される- 符号なしで32ビット目が1となるリテラル(0x80000000)以上の数は、そのまま
int
型の負数として解釈される
1 2 3 4 5 6 7 8 9 10 |
int i = 0; // 0はそのままintとして解釈される System.out.println(i); // 0 i = 0x7fffffff; // int型の正数上限 System.out.println(i); // 2147483647 System.out.println(++i); // int型では負数となり-2147483648 i = 0xffffffff; // int型の負数として解釈 System.out.println(i); // -1 System.out.println(++i); // int型の範囲で循環して0 |
long
64ビットの符号付き2進数で表現可能な整数で、範囲は−9223372036854775808~9223372036854775807(約920京、1018オーダー)。内部表現のサイズは8バイト。
- 与えるリテラルが16ビット以内の数値の場合、int型で解釈され、負数の場合は負数として64ビットに拡張される
- 与えるリテラルが17ビット以上の数値の場合、リテラルには末尾に
L/l
を付ける必要がある - 与えるリテラルが65ビット以上の数値を扱うことはできない
long
型で表現可能な最大値9223372036854775807を超えると最上位ビットが1となって負数になるlong
型で表現された−1(0bffffffffffffffff
)の演算結果がこれを超える場合、65ビット目以上が無視される
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
long lng = 0xffffffff; // 16ビット以内の数はint型で解釈 System.out.println(lng); // -1 System.out.println(Long.toHexString(lng)); // ffffffffffffffff lng = 0x100000000L; // 17ビット以上の数は末尾にL/lをつけないと範囲外エラー System.out.println(lng); // 4294967296 lng = 0x7fffffffffffffffL; // long型の正数上限 System.out.println(lng); // 9223372036854775807 System.out.println(++lng); // long型で負数となり-9223372036854775808 lng = 0xffffffffffffffffL; // long型の負数として解釈 System.out.println(lng); // -1 System.out.println(++lng); // long型の範囲で循環して0 // lng = 0x10000000000000000L; // 65ビット以上の整数は扱えない |
数値型(実数型)
float
32ビット(4バイト)の浮動小数点数で、−3.4028235×1038~−1.4×10−45、1.4×10−45~3.4028235×1038の範囲の実数を扱える。
- 内部表現はIEEE754、符号1ビット、指数部8ビット、仮数部23ビット
- 最大値は
Float.MAX
、最小値はFloat.MIN
で取得できる - 最大値を超える値は
Infinity
、絶対値が最小値を下回る値は0.0となる
double
64 ビット(8バイト)の浮動小数点数で、−1.7976931348623157×10308~−4.9×10−324、4.9×10−324~1.7976931348623157×10308の範囲の実数を扱える。
- 内部表現はIEEE754、符号1ビット、指数部11ビット、仮数部52ビット
- 最大値は
Double.MAX
、最小値はDouble.MIN
で取得できる - 最大値を超える値は
Infinity
、絶対値が最小値を下回る値は0.0となる
文字型
char
16ビットのユニコード1文字を扱う。シングルクォートで囲んだ1文字のほか、ユニコードなら\u0000
~\uffff
、10進数なら0~65535。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
for (char c = '!'; c <= '~'; c++) { System.out.print(c); } // !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ System.out.println(); for (char c = 0x0021; c <= 0x007e; c++) { System.out.print(c); } // !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ System.out.println(); for (char c = 'ぁ'; c <= 'ん'; c++) { System.out.print(c); } // ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん System.out.println(); for (char c = 0x3041; c <= 0x03093; c++) { System.out.print(c); } // ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん System.out.println(); |