LoginSignup
30
17

More than 5 years have passed since last update.

明示的に初期化しなくても自動的にデフォルト値が入るのはどんなときか

Last updated at Posted at 2016-07-18

明示的に初期化をしなかった場合、勝手に初期値を入れてくれるのか、不定値が入ったままなのか、言語や宣言場所による違いのまとめ。

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

クラスや構造体の変数については、宣言場所やインスタンスの作り方によって挙動が変わるのでよくわからない。

勝手に初期化してくれるとはいえ、他人が見るプログラムでは自分で明示的に初期化するようにした方がよさげ。

30
17
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
17