Java認定試験の勉強をはじめました。
そんな認定試験で覚えておかなければならないなと感じたデフォルト値(初期値 / Default value) 。
インスタンス化した直後の要素(宣言したばかり)は、特に指定しない場合はデフォルト値で初期化されるのです。
ということでデフォルト値(初期値) をまとめてみました。
プリミティブ型の値の範囲については下記記事をご確認ください。
初期値早見表
種類 | 型 | デフォルト値 |
整数 | int byte short long | 0 |
浮動小数点数 | float double | 0.0 |
文字 | char | \u0000 |
真偽値 | boolean | false |
参照型 | String など | null |
初期値の確認
本当にそうなるの?と疑ってしまうので、ここからは初期値が正しいのかサンプルコードを元に確認していきたいと思います。
サンプルコード紹介の前に
これから初期値チェック用のサンプルコードを紹介します。お手持ちの環境(Eclipse)などで確認してみてください。環境が整っていない場合、またはサクッと確認したい場合はpaizaでコードを確認してみてください。
整数の初期化
整数のデフォルト値は「0」です。
整数を取り扱う型には int, byte, short,long があります。
int, byte, short, long 初期値チェック用サンプルコード
int, byte, short は整数を扱うので、初期化すると0の初期値が変数に代入されています。
デフォルト値が0っていうのは覚えやすいですね。
※ メソッドに「 int a ; 」 だけで明示的に変数に値を代入しないと「ローカル変数 a が初期化されていない可能性があります」とコンパイルエラーになってしまうので、下の方に書かれているクラスのフィールド内で自動初期化しています。
浮動小数点数の初期化
浮動小数点数のデフォルト値は「0.0」です。
浮動小数点数を取り扱う型には float, double があります。
float, double 初期値チェック用サンプルコード
float, double は浮動小数点数を扱うので、初期化すると0.0の初期値が変数に代入されています。
doubleとfloatの初期値が0.0というのもまだ覚えやすいです。
※ メソッドにfloat a ; だけで明示的に変数に値を代入しないと「ローカル変数 a が初期化されていない可能性があります」とコンパイルエラーになってしまうので、クラスのフィールド内で自動初期化しています。
文字の初期化
文字のデフォルト値は「\u0000」です。
※ちなみに \u0000はnullを表します。
文字を取り扱う型には char があります。Stringは文字を扱いますが文字列となります。
char 初期値チェック用サンプルコード
char は文字を扱いますが初期化するとUnicodeの“\u0000”が初期値として変数に代入されています。
確認しようとSystem.out.println()しても何も表示されないので、真偽値で確認しました。
ついでに興味が湧いたのでintやStringへ型変換して値を見てみました。
intが0になったので、初期値は初期値に変換されるのかと思いましたが、Stringは何も表示されませんでした。
ただ”\u0000″はnullを意味しているので、間違いってことでもないような。
参考サイト:https://www.fileformat.info/info/unicode/char/0000/index.htm
※ メソッドにchar a ; だけで明示的に変数に値を代入しないと「ローカル変数 a が初期化されていない可能性があります」とコンパイルエラーになってしまうので、クラスのフィールド内で自動初期化しています。
真偽値の初期化
真偽値のデフォルト値は「false」です。
真偽値を取り扱う型には boolean があります。
boolean 初期値チェック用サンプルコード
boolean は真偽値を扱うので、初期化するとfalseが初期値として変数に代入されています。
なんとなく初期値はtrueかと思っていたので、意外です。
※ メソッドにboolean a ; だけで明示的に変数に値を代入しないと「ローカル変数 a が初期化されていない可能性があります」とコンパイルエラーになってしまうので、クラスのフィールド内で自動初期化しています。
参照型の初期化
上記の基本データ型(プリミティブ型)とは異なる参照型があります。よく使うのはStringです。
参照型のデフォルト値は「null」です。
String 初期値チェック用サンプルコード
String は参照型なので初期化するとnullが初期値として変数に代入されています。
参照型は奥が深そうですが、私の理解が追いつかないのでここでは深堀しません。すいません。
※ メソッドにString a ; だけで明示的に変数に値を代入しないと「ローカル変数 a が初期化されていない可能性があります」とコンパイルエラーになってしまうので、クラスのフィールド内で自動初期化しています。