Java Bronzeのプリミティブ型纏め

Java Bronzeのプリミティブ型纏め

プリミティブ型を明示的に初期化しなかった場合の初期値がどうなるか出題されます。

これはクラスのフィールド(メンバ変数)のみ初期化されることを覚えておく必要があります。

ローカル変数は初期化されません。但しプリミティブ型の配列はローカル変数であっても初期化されます。

初期値
boolean false
short 0
int 0
float 0.0
double 0.0
long 0
char \u0000
byte 0
オブジェクト null

charとか忘れがちなので覚えておいた方が良いです。charは半角空白です。

以下フィールド変数初期化例です。


public class Main {
static int i;
static boolean flag;
static short s;
static float f;
static double d;
static long l;
static char c;
static byte b;
public static void main(String[] args) {
System.out.println(i); // 0
System.out.println(flag); // false
System.out.println(s); // 0
System.out.println(f); // 0.0
System.out.println(d); // 0.0
System.out.println(l); // 0
System.out.println(":" + c + ":"); // : :
System.out.println(b);// 0
}
}
view raw

initialize

hosted with ❤ by GitHub

プリミティブ型の記憶範囲

多分この手の問題も1問くらい出題されるので覚えておいた方が良いです。

特にbyte,short,int,longくらいが出題される傾向にあるように思います。

範囲
boolean trueまたはfalse
short -32768~32767
int -2147483648~2147483647
float 4バイト単精度浮動小数点数
double 8バイト倍精度浮動小数点数
long -9223372036854775808~9223372036854775807
char \u0000~\uffff(0~65535)
byte -128~127

char型にint型を代入する場合は明示的にキャストする

これは結局は、箱のサイズが違う型なだけであって、そのサイズ内であればchar型でもint型でも同じになります。

ちなみにint型の方がサイズは32bitと大きいので、char型 → int型に変換するにはキャストする必要があります。大きい型から小さい型への変換をナローイング変換と言います。


public class Main {
static char i = 65535; // これはOK
// static char j = 65536; // これはコンパイルエラーなのでコメントする
static int k = 100000; // int型
public static void main(String[] args) {
int x = i; // char型からint型に暗黙変換できる
System.out.println(x); // 65535となる
System.out.println(k); // 100000となる
char xx = (char)k; // int型からchar型に変換する場合は明示的にキャストする
System.out.println(xx); // 蚠となる
}
}
view raw

narrowing

hosted with ❤ by GitHub

浮動小数点数のデフォルトはdouble型

浮動小数点の型はdoubleとfloatがありますが、デフォルトはdouble型になるので、floatの時に接頭辞(末尾)にf、またはFを省くとコンパイルエラーとなるので注意です。


public class Main {
static float f;
static double d;
public static void main(String[] args) {
f = 3.0f; // fかFが必須、省くとコンパイルエラー
d = 4.0; // dかDは必須ではない
}
}
view raw

primitive

hosted with ❤ by GitHub

コメント

タイトルとURLをコピーしました