Javaの基礎の第二弾!
第一弾をみていない方は、ぜひそちらからご覧ください。
一緒にJavaを学んでいきましょう!
データ型
プログラムで扱うことのできるデータの種類 = データ型 があります。
プリミティブ型(基本データ型)
- 値そのものを直接保持する
例えば、int x = 10;
の場合、変数x
の中に「10」という数値が直接入っています。 - メモリ効率が良い
- 操作が高速
- 値渡し(コピーされる)
変数同士で代入や引数渡しをすると、値がコピーされます。 - Javaの8つの基本型がこれにあたる
int
,byte
,short
,long
,float
,double
,char
,boolean
分類 | 型名 | 格納するデータ | 宣言の例 |
---|---|---|---|
整数型 | byte | 1バイトの整数(-128〜127) | byte b = 100; |
short | 2バイトの整数(-32,768〜32,767) | short s = 30000; | |
int | 4バイトの整数(約-21億〜21億) | int i = 100000; | |
long | 8バイトの整数(非常に大きい範囲) | long l = 10000000000L; | |
浮動小数点型 | float | 4バイトの小数点数(単精度) | float f = 3.14f; |
double | 8バイトの小数点数(倍精度) | double d = 3.14159; | |
文字型 | char | 2バイトの文字(Unicodeの1文字) | char c = 'A'; |
論理型 | boolean | 真偽値(true または false ) | boolean flag = true; |
- Q
long
の宣言の例にある 「 L 」って何? - A
リテラルが
long
型であることを明示するためのサフィックス(接尾辞)です。
Javaでは、数値リテラル(例えば100
や10000000000
)は基本的にint
型 として扱われます。
ただし、int
型の最大値は約21億(2,147,483,647
)なので、それを超える数値はint
では表現できません。
そこで、long
型のリテラルであることを示すために、数値の末尾にL
またはl
を付けます。L
とl
は同じ意味ですが、小文字のl
は数字の1に見間違えやすいので、通常は大文字のL
を使うのが推奨されています。
- Q
の宣言の例にある 「 f 」って何?float
- A
リテラルが
float
型であることを示すためのサフィックス(接尾辞)です。
リテラルの末尾にf
またはF
をつけて、「これはfloat
型のリテラルですよ」 と明示します。
Javaでは、小数の数値リテラルはデフォルトでdouble
型 として扱われます。
つまり3.14
はdouble
型のリテラル。
変数f
はfloat
型なので、double
をそのまま代入するとエラーになります(型が異なるため)。
参照型(オブジェクト型)
- 実体(データ)はヒープ領域に置かれ、変数にはその実体の「参照(アドレス)」が入る
例えば、String s = "hello";
の場合、変数s
には「文字列オブジェクトの場所(メモリアドレス)」が格納されています。 - 参照渡し
変数同士の代入や引数渡しは、実体ではなく「参照(ポインタ)」がコピーされます。 - メソッドやプロパティを持てる
オブジェクトには操作やデータがまとまっている(例えば文字列の長さを返すlength()
メソッドなど) - 自分で作ったクラスやライブラリのクラスはすべてオブジェクト型
- 配列も参照型の一種
分類 | 型名 | 格納するデータ | 宣言の例 |
---|---|---|---|
クラス型 | String | 文字列のデータ(文字の並び) | String name = "Ami"; |
独自のクラス名 | クラスのインスタンス(オブジェクトの参照) | Car car = new Car(); | |
配列 | 配列型 | 同じ型の複数のデータ | int[] numbers = {1, 2, 3}; |

< ヒープ領域とは >
Javaプログラムが実行される際に、動的に作成されるオブジェクトや配列が格納されるメモリ領域のことを「ヒープ領域」と呼びます。
- Java仮想マシン(JVM)が管理するメモリの一部。
- new演算子で生成されたオブジェクトはすべてこのヒープ領域に置かれる。
- プリミティブ型(intやbooleanなど)は基本的にスタックに直接格納されますが、オブジェクト型はヒープ上に配置される。
< なぜヒープ領域が必要? >
- 動的メモリ確保:実行時に必要な分だけオブジェクトを作成できるようにするため。
- 寿命の管理:ローカル変数(スタック上)とは違い、ヒープ上のオブジェクトは参照がなくなるまで存在し続ける。
- ガベージコレクション:不要になったオブジェクトは自動的にJVMのガベージコレクタによって回収される。
注意点
- オブジェクト型は
null
が入ることがあり、参照がない状態を表せる(プリミティブ型は不可) - プリミティブ型のラッパークラス(例:
Integer
はint
のラッパークラス)を使うことで、プリミティブ型の値をオブジェクトとして扱うこともできます。
変数の上書き
public class Main{
public static void main(String[] args) {
int i = 100;
System.out.println(i);
i = 5; //再代入
System.out.println(i);
}
}
上記のコードの実行結果は、
100
5
になります。
同じ変数に代入してしまっているので、上書きされてしまっていますね?
絶対に上書きされたくない場合は、「final」を使用します。
「final」付きで宣言された変数は、定数と呼ばれ、初期値が代入された後は、値を書き換えることができなくなります。
public class Main{
public static void main(String[] args){
final int i = 20;
System.out.println(i);
i = 15;
System.out.println(i);
}
}
上記のコードは、final
変数 i
に再代入しようとしているため、コンパイルエラーになります。final
がついた変数は、一度値をセットすると変更できないため、再代入は許されません。
まとめ
第二弾も初めてみる方は、覚えられない!と思うかもしれませんが、暗記をするというよりは何度も見て、何度も書いて理解するという方が大切になります。
ぜひ、いろんな値を代入して試してみてください。