データの宣言と使用の要点
内容の確認日: 2026-10-03
この分野では、Java で値を扱うための基本である「型」「変数」「配列」が問われます。どの型にどんな値が入るか、宣言や初期化の書き方が正しいか (コンパイルエラーにならないか) を見分ける問題が中心です。
出題項目は「Java のデータ型 (プリミティブ型、参照型)」「変数や定数の宣言と初期化、値の有効範囲」「配列 (一次元配列) の宣言と作成、使用」「コマンドライン引数の利用」の 4 つです。特に、リテラルの型と配列の書き方は引っかけが多いので、コードで確かめながら覚えましょう。
プリミティブ型と参照型
Java の型は、値そのものを入れるプリミティブ型と、オブジェクトへの参照を入れる参照型に分かれます。プリミティブ型は次の 8 つだけで、それ以外 (String・配列・自分で作ったクラスなど) はすべて参照型です。
・整数: byte (8 ビット)、short (16 ビット)、int (32 ビット)、long (64 ビット)
・浮動小数点数: float (32 ビット)、double (64 ビット)
・文字: char (16 ビット。Unicode の 1 文字)
・真偽値: boolean (true か false のみ)
boolean には true・false 以外の値は入りません。C 言語のように 0 や 1 を真偽値として使うことはできない点に注意してください。参照型の変数には、どのオブジェクトも指していないことを表す null を入れられますが、プリミティブ型の変数には入れられません。
char は文字ですが、中身は文字コードの数値です。そのため計算に使うと int として扱われます。
public class Main { public static void main(String[] args) { char c = 'A'; System.out.println(c + 1); System.out.println((char) (c + 1)); }}java Main 66 B
リテラルの型と書き方
コードに直接書いた値 (リテラル) にも型があります。整数のリテラルは int 型、小数点のあるリテラルは double 型として扱われるのが基本です。long にしたいときは末尾に L、float にしたいときは末尾に F を付けます。
そのため、float f = 3.14; は double の値を float に入れようとしてコンパイルエラーになります。float f = 3.14F; と書く必要があります。
public class Main { public static void main(String[] args) { float f = 3.14; System.out.println(f); }}javac Main.java
コンパイルエラー (3 行目): 3.14 は double 型のリテラルで、float 型の変数にはそのまま代入できない
整数は 10 進数のほか、先頭に 0b を付けると 2 進数、0 を付けると 8 進数、0x を付けると 16 進数として書けます。桁の区切りとして数字の間に _ (アンダースコア) を入れることもできます。先頭の 0 だけで 8 進数になる点は見落としやすいので注意しましょう。
public class Main { public static void main(String[] args) { System.out.println(0b101); System.out.println(010); System.out.println(0x1F); System.out.println(1_000_000); }}java Main 5 8 31 1000000
_ は数字と数字の間にしか書けません。_100 (先頭)、100_ (末尾)、3._14 (小数点の隣) はいずれも誤りです。
変数・定数の宣言と初期化
メソッドの中で宣言した変数 (ローカル変数) は、値を代入する前に読み出すとコンパイルエラーになります。ローカル変数には既定値がないためです。
public class Main { public static void main(String[] args) { int count; System.out.println(count); }}javac Main.java
コンパイルエラー (4 行目): 変数 count が初期化されていない可能性がある
一方、クラスに宣言したフィールドには既定値があり、数値型は 0、boolean は false、char は '\u0000'、参照型は null で自動的に初期化されます。ローカル変数とフィールドで扱いが違うことを押さえておきましょう。
final を付けた変数は定数になり、一度値を入れたら変更できません。再代入しようとするとコンパイルエラーです。定数の名前は MAX_SIZE のように大文字とアンダースコアで書くのが慣習です。
Java SE 10 からは、ローカル変数の宣言で型の代わりに var と書けます。型は右辺の値から決まり (var value = 100; なら int)、その後は普通の変数と同じく型が固定されます。右辺がない var x; や var x = null; は型を決められないのでコンパイルエラーです。また、var を使えるのはローカル変数だけで、フィールドやメソッドの引数には使えません。
変数の有効範囲 (スコープ)
変数が使えるのは、宣言した { } のブロックの中だけです。if や for のブロックの中で宣言した変数は、ブロックを出ると使えません。
public class Main { public static void main(String[] args) { if (args.length == 0) { String message = "引数なし"; } System.out.println(message); }}javac Main.java
コンパイルエラー (6 行目): message は if のブロックの中でしか使えない
また、同じメソッドの中で、有効範囲が重なる同じ名前のローカル変数を 2 回宣言することはできません。外側のブロックの変数と同じ名前を、内側のブロックで宣言するのもコンパイルエラーです。
一次元配列の宣言・作成・使用
配列は、同じ型の値をまとめて扱う参照型です。宣言は int[] scores; が一般的ですが、int scores[]; のように変数名の後ろに [] を書くこともできます。宣言しただけでは配列は作られず、new で要素数を指定して作ります。
new で作った配列の要素は、フィールドと同じ既定値 (数値は 0、boolean は false、参照型は null) で初期化されます。要素数は length で取得できます。length はメソッドではないので () を付けません (文字列の長さを返す String の length() とは違います)。
public class Main { public static void main(String[] args) { int[] numbers = new int[3]; String[] names = new String[2]; System.out.println(numbers.length); System.out.println(numbers[0]); System.out.println(names[1]); }}java Main 3 0 null
作ると同時に値を入れるときは、int[] a = {1, 2, 3}; または int[] a = new int[]{1, 2, 3}; と書きます。new int[3]{1, 2, 3} のように要素数と初期値を両方書くとコンパイルエラーです。宣言側に要素数を書く int[3] a; も誤りです。
public class Main { public static void main(String[] args) { int[] a = new int[3]{1, 2, 3}; System.out.println(a.length); }}javac Main.java
コンパイルエラー (3 行目): 初期値を書くときは要素数を指定できない
添字は 0 から始まり、最後の要素は length - 1 です。範囲外の添字を使うと、コンパイルは通りますが実行時に ArrayIndexOutOfBoundsException が発生します。
public class Main { public static void main(String[] args) { int[] a = {10, 20, 30}; System.out.println(a[a.length - 1]); System.out.println(a[3]); }}java Main 30
実行時に例外が発生: ArrayIndexOutOfBoundsException
コマンドライン引数の利用
java Main 10 20 のように渡したコマンドライン引数は、main メソッドの String[] args に入ります。数字を渡しても、受け取る値は文字列です。そのまま + でつなぐと文字列の連結になるので、数値として計算したいときは Integer.parseInt で int に変換します。
public class Main { public static void main(String[] args) { System.out.println(args[0] + args[1]); int sum = Integer.parseInt(args[0]) + Integer.parseInt(args[1]); System.out.println(sum); }}java Main 10 20 1020 30
試験でよくある引っかけ
floatやlongのリテラルの接尾辞float f = 3.14;はコンパイルエラーです (3.14Fと書く)。long n = 3000000000;もintの範囲を超えるのでエラーになり、3000000000Lと書きます。先頭が 0 の整数
010は 10 ではなく 8 進数の 8 です。初期化していないローカル変数
フィールドは既定値で初期化されますが、ローカル変数は代入する前に読むとコンパイルエラーです。
配列の要素数と初期値を両方書く
new int[3]{1, 2, 3}はコンパイルエラーです。new int[]{1, 2, 3}か{1, 2, 3}と書きます。配列の
lengthに()を付ける配列の要素数は
a.lengthです。a.length()はコンパイルエラーです (Stringの長さはlength())。コマンドライン引数は文字列
args[0] + args[1]は文字列の連結です。数値として足すにはInteger.parseIntで変換します。
問題で確認する
この分野の問題を、解説つきで読めます (登録不要)。
出典・参考
- Oracle University 日本「1Z0-818-JPN (Java SE Bronze) 試験」
- Java 言語仕様 (Java SE 11) 4.2「Primitive Types and Values」
- Java 言語仕様 (Java SE 11) 3.10.1「Integer Literals」
- Java 言語仕様 (Java SE 11) 10.6「Array Initializers」
コード例は、試験の対象バージョンで実際にコンパイル・実行して結果を確認しています。