明示的に初期化をしなかった場合、勝手に初期値を入れてくれるのか、不定値が入ったままなのか、言語や宣言場所による違いのまとめ。
#Java#
##インスタンス変数##
インスタンス変数には自動でデフォルト値が入る。
public class Sample{
int x; //インスタンス変数
void show(){
int tmp; //ローカル変数
System.out.println("x = " + x);
}
}
変数の型 | デフォルト値 |
---|---|
int , short , byte , long | 0 |
float , double | 0.0 |
char | '\u0000' |
boolean | false |
オブジェクト参照 | null |
配列の場合でも全ての要素にデフォルト値が入る。
##ローカル変数##
ローカル変数では自動的に初期化はされない。
自分で明示的に初期化しないとコンパイルエラーが出る。
しかし、ローカル変数であっても配列だけは自動で初期化される。
参考サイト
http://www.booran.com/menu/java/format.html
#C/C++#
##グローバル変数##
グローバル変数はデフォルト値で初期化される。
#include <stdio.h>
int g_hoge; //グローバル変数
int main(){
int a; //ローカル変数
return 0;
}
変数の型 | デフォルト値 |
---|---|
int , short , long | 0 |
float , double | 0.0 |
char | '\0' |
bool | false |
オブジェクト参照 | NULL |
配列の場合でも全ての要素にデフォルト値が入る。
##ローカル変数##
ローカル変数では自動的に初期化はされない。
Javaとは違い、ローカル変数の配列も初期化されない。
static
が付いている変数の場合、ローカル変数であっても初期化される。
参考サイト
http://edu.clipper.co.jp/pg-2-33.html
クラスや構造体の変数については、宣言場所やインスタンスの作り方によって挙動が変わるのでよくわからない。
勝手に初期化してくれるとはいえ、他人が見るプログラムでは自分で明示的に初期化するようにした方がよさげ。