Skip to main content

変数と型

この章で得られるスキル:

  • ✅ データを保存して再利用できる
  • ✅ 基本データ型(int, double, boolean, String)を使い分けられる
  • ✅ わかりやすい変数名が付けられる
  • ✅ 実務でよく使う変数のパターンを理解できる

Step 0: まず体験してみよう

説明の前に、まず 変数がないと何が困るのか を体験しよう。

シナリオ:SNSのプロフィールページを作りたい

あなたはSNSアプリを作っている。ユーザーのプロフィールページに、名前、年齢、フォロワー数、自己紹介を表示したい。

実行してみよう(変数なし):

public class Main { public static void main(String[] args) { // プロフィール表示(変数なし) System.out.println("=== プロフィール ==="); System.out.println("名前: 太郎"); System.out.println("年齢: 25歳"); System.out.println("フォロワー: 1200人"); System.out.println("自己紹介: プログラミング学習中です"); System.out.println("=================="); System.out.println(); // 別の画面でも同じ情報を表示したい System.out.println("投稿者: 太郎(25歳)"); System.out.println("太郎さんのフォロワー: 1200人"); // 名前を変えたくなったら? // 全ての「太郎」を探して書き換える必要がある... } }

問題点:

  • 同じ情報(名前、年齢など)を何度も書く必要がある
  • 情報を変更したくなったら、全箇所を探して修正する必要がある
  • 誤字脱字が起きやすい
  • コードが長く読みにくい

では、変数を使うとどうなるか?

public class Main { public static void main(String[] args) { // 変数に情報を保存 String name = "太郎"; int age = 25; int followers = 1200; String bio = "プログラミング学習中です"; // プロフィール表示 System.out.println("=== プロフィール ==="); System.out.println("名前: " + name); System.out.println("年齢: " + age + "歳"); System.out.println("フォロワー: " + followers + "人"); System.out.println("自己紹介: " + bio); System.out.println("=================="); System.out.println(); // 別の画面でも同じ情報を簡単に表示できる System.out.println("投稿者: " + name + "(" + age + "歳)"); System.out.println(name + "さんのフォロワー: " + followers + "人"); // 名前を変えたい?変数の値を1箇所変えるだけ! } }

解決できたこと:

  • ✅ 情報を1箇所で管理できる
  • ✅ 変更が1箇所で済む
  • ✅ 誤字脱字が減る
  • ✅ コードが読みやすくなる

Step 1: 変数の基本を理解する

変数 は、データを一時的に保存するための「箱」 である。

変数の3つの要素

int age = 25;

この1行には3つの要素がある:

要素意味
型(Type)箱の種類(何を入れるか)int(整数)
変数名(Name)箱の名前(ラベル)age
値(Value)箱に入れるデータ25

変数の使い方

public class Main { public static void main(String[] args) { // 変数の宣言と初期化 int score = 100; // 変数を使う System.out.println("スコア: " + score); System.out.println("2倍: " + (score * 2)); // 変数の値を変更 score = 150; System.out.println("変更後: " + score); } }

やってみよう:

  • scoreの初期値を変えてみよう
  • 新しい変数を追加してみよう

Step 2: 代入の仕組みを理解する

代入 は、右辺の値を左辺の変数に入れること である。

イコール記号の意味

プログラミングの=は、数学の「等しい」ではない!

int x = 10;  // 「xは10に等しい」ではなく「10をxに代入する」

代入の流れ

1. 右辺(10)を計算する
2. 計算結果を左辺の変数(x)に代入する
public class Main { public static void main(String[] args) { int x = 10; System.out.println("最初のx: " + x); x = 20; // xに20を代入(xの値が変わる) System.out.println("変更後のx: " + x); x = x + 5; // xの現在の値(20)に5を足して、結果をxに代入 System.out.println("さらに変更: " + x); // 数学では「x = x + 5」は意味不明 // プログラミングでは「xの値に5を足して、結果をxに代入」という意味 } }

やってみよう:

  • x = x + 5x = x * 2に変えてみよう
  • x = x - 3を試してみよう
ポイント

x = x + 1は「xの値を1増やす」という意味。 実務でよく使うパターンなので覚えておこう。


Step 3: 基本データ型を理解する

Javaには、以下の 基本データ型 がある:

よく使う4つの型

分類扱えるデータ
intプリミティブ型整数10, -5, 0
doubleプリミティブ型小数3.14, -0.5
booleanプリミティブ型真偽値true, false
String参照型文字列"Hello", "太郎"
型名の大文字・小文字
  • 小文字で始まる(int, double, boolean):プリミティブ型
  • 大文字で始まる(String):参照型(クラス)

この違いは第10章で学ぶ。今は「Stringだけ大文字」と覚えておこう。

実際に使ってみよう

public class Main { public static void main(String[] args) { // int(整数) int age = 25; int temperature = -5; System.out.println("年齢: " + age); System.out.println("気温: " + temperature + "度"); System.out.println("---"); // double(小数) double price = 1500.5; double pi = 3.14159; System.out.println("価格: " + price + "円"); System.out.println("円周率: " + pi); System.out.println("---"); // boolean(真偽値) boolean isLoggedIn = true; boolean isRaining = false; System.out.println("ログイン中: " + isLoggedIn); System.out.println("雨が降っている: " + isRaining); System.out.println("---"); // String(文字列) String name = "太郎"; String message = "こんにちは"; System.out.println("名前: " + name); System.out.println("メッセージ: " + message); } }

やってみよう:

  • 自分の情報で変数を作ってみよう
  • 各型でどんな値が使えるか試してみよう

Step 4: 変数の命名規則を理解する

基本ルール

  1. 英字、数字、アンダースコア(_)が使える

    • age, price1, user_name
    • 価格(日本語は不可)
  2. 数字から始められない

    • price1
    • 1price
  3. 予約語は使えない

    • int, class, public

Javaの命名規則

変数名:キャメルケース(camelCase)

int totalPrice = 1000;        // ✅ 良い例
String firstName = "太郎"; // ✅ 良い例
boolean isLoggedIn = true; // ✅ 良い例

int TotalPrice = 1000; // ❌ 変数は小文字始まり
String first_name = "太郎"; // ❌ Javaではスネークケースは使わない
int a = 1000; // ❌ 意味が分からない

わかりやすい名前をつける

public class Main { public static void main(String[] args) { // ❌ 悪い例:何の変数か分からない int a = 100; int b = 200; int c = a + b; System.out.println(c); System.out.println("---"); // ✅ 良い例:何をしているか一目で分かる int basePrice = 100; int tax = 200; int totalPrice = basePrice + tax; System.out.println("合計金額: " + totalPrice + "円"); } }

やってみよう:

  • 悪い例のコードを良い例に書き直してみよう
ポイント

変数名は、他の人(または未来の自分)が読んで理解できるように つける。 3ヶ月後に自分のコードを見返したとき、aでは何か分からない。 totalPriceなら一目で理解できる。


Step 5: 型変換を理解する

暗黙の型変換(自動)

小さい型 → 大きい型 は自動的に変換される。

int num = 10;
double decimal = num; // int → double(自動)
System.out.println(decimal); // 10.0

明示的な型変換(キャスト)

大きい型 → 小さい型 は明示的に変換する必要がある。

double decimal = 3.14;
int num = (int) decimal; // double → int(キャスト)
System.out.println(num); // 3(小数点以下が切り捨て)
public class Main { public static void main(String[] args) { // 暗黙の型変換 int score = 85; double averageScore = score; // int → double(自動) System.out.println("平均点: " + averageScore); System.out.println("---"); // 明示的な型変換(キャスト) double price = 1234.56; int roundedPrice = (int) price; // double → int System.out.println("元の価格: " + price + "円"); System.out.println("切り捨て: " + roundedPrice + "円"); System.out.println("---"); // 小数点以下が切り捨てられることに注意 double decimal = 9.99; int integer = (int) decimal; System.out.println("9.99 → " + integer); // 9(10ではない!) } }

やってみよう:

  • 9.1, 9.5, 9.9をintに変換してみよう
  • すべて切り捨てになることを確認しよう
注意

(int)切り捨て であって、四捨五入ではない! 9.99intに変換すると9になる(10にはならない)。


Step 6: スコープを理解する

スコープ とは、変数が使える範囲 のことである。

基本ルール

ブロック({})の中で宣言した変数は、そのブロック内でのみ使える。

public class Main { public static void main(String[] args) { int x = 10; System.out.println("mainブロック内: x = " + x); // OK if (x > 5) { int y = 20; // ifブロック内で宣言 System.out.println("ifブロック内: x = " + x); // OK(外側の変数) System.out.println("ifブロック内: y = " + y); // OK(同じブロック) } // ここでyは消える System.out.println("mainブロック内: x = " + x); // OK // System.out.println("mainブロック内: y = " + y); // エラー!yはもう存在しない } }

やってみよう:

  • コメントアウトされている行のコメントを外してエラーを確認してみよう
ポイント

変数は 宣言されたブロック内でのみ有効。 ブロックが終わる}で、その変数は消える。


Step 7: 定数を理解する

定数 は、一度値を設定したら変更できない変数 である。

定数の宣言

final int MAX_SCORE = 100;  // 定数(変更不可)
MAX_SCORE = 200; // エラー!定数は変更できない

定数の命名規則

全て大文字 + アンダースコア区切り

final int MAX_STUDENTS = 30;
final double PI = 3.14159;
final String COMPANY_NAME = "ABC Company";

なぜ定数が必要か

public class Main { public static void main(String[] args) { // ❌ 悪い例:マジックナンバー(意味不明な数字) int price1 = 1000 * 10 / 100; int price2 = 2000 * 10 / 100; int price3 = 3000 * 10 / 100; // 「10」が何を意味するか分からない // 「10」を変更するには全箇所を探す必要がある System.out.println("悪い例:"); System.out.println("商品1の税額: " + price1); System.out.println("商品2の税額: " + price2); System.out.println("商品3の税額: " + price3); System.out.println("---"); // ✅ 良い例:定数を使う final int TAX_RATE = 10; // 税率(%) int tax1 = 1000 * TAX_RATE / 100; int tax2 = 2000 * TAX_RATE / 100; int tax3 = 3000 * TAX_RATE / 100; // 意味が明確 // 税率が変わっても、定数の値を1箇所変えるだけ System.out.println("良い例:"); System.out.println("商品1の税額: " + tax1); System.out.println("商品2の税額: " + tax2); System.out.println("商品3の税額: " + tax3); } }

やってみよう:

  • TAX_RATE8に変えて実行してみよう
  • 1箇所変えるだけで全体が変わることを確認しよう

Step 8: 実践課題

これまで学んだことを組み合わせて、実践的なプログラムを作ってみよう。

課題1:ゲームキャラクターのステータス表示

仕様:

  • キャラクター名、レベル、HP、MP、攻撃力を変数で管理
  • ステータスを表示
public class Main { public static void main(String[] args) { // キャラクターのステータス String characterName = "勇者"; int level = 15; int hp = 250; int mp = 120; int attack = 85; int defense = 60; // ステータス表示 System.out.println("===================="); System.out.println(" キャラクターステータス"); System.out.println("===================="); System.out.println("名前: " + characterName); System.out.println("レベル: Lv." + level); System.out.println("HP: " + hp + " / " + hp); System.out.println("MP: " + mp + " / " + mp); System.out.println("攻撃力: " + attack); System.out.println("防御力: " + defense); System.out.println("===================="); System.out.println(); // 戦闘後のステータス int damageReceived = 50; int mpUsed = 30; hp = hp - damageReceived; mp = mp - mpUsed; System.out.println("【戦闘後】"); System.out.println("HP: " + hp + " / 250"); System.out.println("MP: " + mp + " / 120"); } }

やってみよう:

  • 自分の好きなキャラクター名でステータスを作ってみよう
  • レベルアップでステータスが上がるプログラムを書いてみよう

課題2:商品価格計算プログラム

仕様:

  • 商品の税抜き価格と消費税率を変数で管理
  • 税込み価格を計算して表示
public class Main { public static void main(String[] args) { // 定数定義 final int TAX_RATE = 10; // 消費税率(%) // 商品情報 String productName = "ノートPC"; int basePrice = 120000; // 税抜き価格 // 税込み価格を計算 int taxAmount = basePrice * TAX_RATE / 100; int totalPrice = basePrice + taxAmount; // 表示 System.out.println("=== お会計 ==="); System.out.println("商品名: " + productName); System.out.println("税抜き価格: " + basePrice + "円"); System.out.println("消費税(" + TAX_RATE + "%): " + taxAmount + "円"); System.out.println("---"); System.out.println("合計: " + totalPrice + "円"); System.out.println("=============="); } }

やってみよう:

  • 別の商品(例:スマホ、タブレット)で計算してみよう
  • 消費税率を8%に変えてみよう

課題3:ユーザー情報管理

仕様:

  • SNSユーザーの情報を変数で管理
  • プロフィールカードを表示
public class Main { public static void main(String[] args) { // ユーザー情報 String username = "taro_dev"; String displayName = "太郎"; int age = 25; String bio = "プログラマー志望。Javaを勉強中!"; int followersCount = 1250; int followingCount = 320; int postsCount = 145; boolean isVerified = false; // プロフィールカード表示 System.out.println("┌────────────────────────────┐"); System.out.println("│ プロフィールカード │"); System.out.println("├────────────────────────────┤"); System.out.println("│ @" + username); if (isVerified) { System.out.println("│ " + displayName + " ✓(認証済み)"); } else { System.out.println("│ " + displayName); } System.out.println("│ " + age + "歳"); System.out.println("│"); System.out.println("│ " + bio); System.out.println("│"); System.out.println("│ 投稿: " + postsCount); System.out.println("│ フォロワー: " + followersCount); System.out.println("│ フォロー中: " + followingCount); System.out.println("└────────────────────────────┘"); } }

やってみよう:

  • 自分のSNS情報でプロフィールカードを作ってみよう
  • isVerifiedtrueに変えて、認証バッジが表示されることを確認しよう

まとめ

この章では、Javaの 変数と型 について学んだ。

🎯 達成できたこと

  • ✅ データを保存して再利用できるようになった
  • ✅ 基本データ型(int, double, boolean, String)を使い分けられるようになった
  • ✅ わかりやすい変数名が付けられるようになった
  • ✅ 実務でよく使う変数のパターンを理解できた

📚 学んだ内容

概念説明
変数データを一時的に保存する「箱」int age = 25;
代入右辺の値を左辺の変数に入れるx = 10;
int整数を扱う型10, -5, 0
double小数を扱う型3.14, -0.5
boolean真偽値を扱う型true, false
String文字列を扱う型"Hello", "太郎"
型変換型を変換すること(int) 3.143
スコープ変数が使える範囲ブロック内のみ有効
定数変更できない変数final int MAX = 100;

🚀 次のステップ

次の章では、演算子 について学ぶ。 変数を使った計算や比較ができるようになる。


💡 よくある質問

Q1: intとdoubleはどう使い分ければいい?

A: 小数が必要かどうかで判断する。

  • int:人数、年齢、レベルなど(小数がない)
  • double:価格、身長、体重など(小数がある)

Q2: 変数名に日本語は使えないの?

A: 技術的には使えるが、使わないのが慣習

int 年齢 = 25;  // 動くが、使わない
int age = 25; // ✅ こちらが良い

理由:

  • 国際的なプロジェクトで読めない
  • IDEやツールで問題が起きる可能性
  • 英語で書くのがプログラミング界の共通言語

Q3: 変数名が長すぎるのは良くない?

A: 分かりやすさ > 短さ を優先する。

int n = 100;                    // ❌ 短いが意味不明
int numberOfStudents = 100; // ✅ 長いが分かりやすい
int num = 100; // △ やや曖昧

ただし、極端に長いのも避ける:

int numberOfStudentsInClassARoomOnTheSecondFloor = 30;  // ❌ 長すぎ

Q4: finalは必ず使わないといけない?

A: 必須ではないが、変わらない値にはfinalを使うべき

int taxRate = 10;        // ❌ 変更される可能性がある
final int TAX_RATE = 10; // ✅ 変更されないことが保証される

メリット:

  • バグが減る(意図しない変更を防げる)
  • コードが読みやすい(「この値は変わらない」と分かる)

Q5: Stringだけ大文字で始まるのはなぜ?

A: Stringは クラス(参照型) だから。

  • プリミティブ型(int, double, boolean):小文字
  • 参照型(クラス)(String):大文字

詳しくは第10章(オブジェクト指向)で学ぶ。 今は「Stringだけ特別」と覚えておこう。


変数の説明として最も適切なものを選べ。

正解

B. データを一時的に保存する箱のようなもの

解説

変数とは、データを一時的に保存するための箱のようなものです。

プログラム実行中に値を保持し、後で取り出して使うことができます。

例えば、以下のコードでは変数ageに値25を保存しています。

int age = 25;
System.out.println(age); // 25が出力される

このように、変数に保存した値を後から取り出して使うことができます。

「型」とは何か、自分の言葉で説明してください。

解答例
型とは、変数に入れることができるデータの種類を決めるものである。例えば、int型は整数、String型は文字列を扱える。
解説

型(Type) とは、変数に入れることができるデータの種類を決めるもの である。

プログラミングでは、数値、文字列、真偽値など、様々な種類のデータを扱う。 型を指定することで、その変数がどんなデータを扱うかを明確にする。

型を指定する理由

  1. エラーを防ぐ:間違ったデータを入れようとするとエラーになる
  2. コードが読みやすくなる:変数の用途が一目で分かる
  3. 適切な処理ができる:データの種類に応じた処理ができる

主な型の例

  • int: 整数(10, -5, 0)
  • double: 小数(3.14, -0.5)
  • boolean: 真偽値(true, false)
  • String: 文字列("Hello", "太郎")

int型が扱えるデータとして正しいものを選べ。

正解

B. 整数(例:-100, 0, 42)

解説

int型は、整数を扱うための型です。

小数点を含まない数値を保存できます。

int age = 25;
int temperature = -5;
int score = 0;

int型で扱える範囲

  • 約-21億から約21億まで(-2,147,483,648 ~ 2,147,483,647)
  • 小数点は扱えない(小数を扱うにはdouble型を使う)

注意

  • int x = 3.14; はエラーになります(int型に小数は代入できない)

double型が扱えるデータとして正しいものを選べ。

正解

B. 小数(例:3.14, -0.5)

解説

double型は、小数を扱うための型です。

小数点を含む数値を保存できます。

double price = 199.99;
double temperature = -5.5;
double pi = 3.14159;

double型の特徴

  • 小数点以下の値を扱える
  • 整数も代入できる(double x = 10; は OK)
  • 非常に大きな数や小さな数を扱える

使い分け

  • 小数が必要な場合:doubleを使う(価格、温度、計算結果など)
  • 整数のみで十分な場合:intを使う(年齢、カウント数など)

String型が扱えるデータとして正しいものを選べ。

正解

C. 文字列(例:"Hello", "田中")

解説

String型は、文字列(テキスト)を扱うための型です。

ダブルクォート " で囲んだ文字の並びを保存できます。

String name = "田中太郎";
String message = "Hello, World!";
String empty = "";  // 空文字列

String型の特徴

  • 文字、単語、文章などのテキストデータを扱う
  • ダブルクォート " で囲む必要がある
  • 日本語も扱える
  • 数字も文字列として扱える(String age = "25"; は文字列の "25")

注意

  • String x = Hello; はエラー(ダブルクォートが必要)
  • String x = 'Hello'; もエラー(シングルクォートは1文字用)

boolean型が扱えるデータとして正しいものを選べ。

正解

A. trueまたはfalseの2つの値のみ

解説

boolean型は、真偽値(trueまたはfalse)を扱うための型です。

「はい/いいえ」「正しい/正しくない」のような2つの状態を表現できます。

boolean isStudent = true;
boolean hasLicense = false;
boolean isAdult = age >= 20;  // 比較結果もboolean型

boolean型の特徴

  • 取れる値は truefalse の2つだけ
  • ダブルクォートは付けない(boolean x = "true"; はエラー)
  • 条件分岐(if文)やループで頻繁に使う

注意

  • truefalse は小文字で書く(TrueFALSE はエラー)
  • 数値の0や1では代用できない(Javaでは 0 != false

代入の説明として正しいものを選べ。

正解

A. 変数に値を格納すること

解説

代入とは、変数に値を格納する操作のことです。

=(代入演算子)を使って、右側の値を左側の変数に入れます。

int age = 25;       // 変数ageに25を代入
age = 30;           // 変数ageの値を30に更新
String name = "田中"; // 変数nameに"田中"を代入

代入の仕組み

  • 変数名 = 値; の形で書く
  • 右から左に値が流れる(= は「等しい」ではなく「代入」)
  • 同じ変数に何度でも代入できる(値を更新できる)

注意

  • 25 = age; はエラー(左側は必ず変数)
  • = は数学の等号ではなく、代入を意味する
  • 代入前に変数を宣言する必要がある

問題

以下のコードの空欄を埋めて、変数ageに値25を代入してください。

age =
;

解答例
int age = 25;
解説

変数を宣言するには、まず (この場合はint)を指定し、次に変数名、そして=で値を代入する。

int age = 25;
  • int: 整数型の型名
  • age: 変数名
  • 25: 代入する値

問題

以下のコードの空欄を埋めて、変数scoreに整数値42を代入してください。

score =
;

解答例
int score = 42;
解説

int型で整数を扱うには、変数宣言時に int を指定します。

int score = 42;
  • int: 整数型の型名
  • score: 変数名
  • 42: 整数値

int型で扱える値の例

  • 正の整数:1, 100, 2024
  • 負の整数:-1, -100, -2024
  • ゼロ:0
  • 小数は扱えない(int x = 3.14; はエラー)

問題

以下のコードの空欄を埋めて、変数piに小数値3.14を代入してください。

pi =
;

解答例
double pi = 3.14;
解説

double型で小数を扱うには、変数宣言時に double を指定します。

double pi = 3.14;
  • double: 小数型の型名
  • pi: 変数名
  • 3.14: 小数値

double型で扱える値の例

  • 小数:3.14, -0.5, 99.99
  • 整数も代入可能:100.0, 0.0
  • 非常に大きな数や小さな数も扱える

使い分け

  • 小数が必要な場合(価格、温度など):double
  • 整数のみの場合(年齢、カウント数など):int

問題

以下のコードの空欄を埋めて、変数isStudentに真偽値trueを代入してください。

isStudent =
;

解答例
boolean isStudent = true;
解説

boolean型で真偽値を扱うには、変数宣言時に boolean を指定します。

boolean isStudent = true;
  • boolean: 真偽値型の型名
  • isStudent: 変数名
  • true: 真(正しい)を表す値

boolean型で扱える値

  • true(真)
  • false(偽)
  • この2つの値のみ

注意

  • 小文字で書く(TrueFALSE はエラー)
  • ダブルクォートは付けない("true" は文字列)
  • 条件分岐やループで頻繁に使う

問題

以下のコードの空欄を埋めて、変数messageに文字列"Hello"を代入してください。

message =
;

解答例
String message = "Hello";
解説

String型で文字列を扱うには、変数宣言時に String を指定し、値をダブルクォート " で囲みます。

String message = "Hello";
  • String: 文字列型の型名(大文字のSに注意)
  • message: 変数名
  • "Hello": 文字列値(ダブルクォートで囲む)

String型の特徴

  • 文字、単語、文章を扱える
  • 日本語も使える:String name = "田中";
  • 空文字列も扱える:String empty = "";
  • 数字も文字列として扱える:String age = "25";

注意

  • StringSは大文字(stringはエラー)
  • ダブルクォートを忘れない(String x = Hello; はエラー)

学生の年齢を格納する変数として、最もわかりやすい変数名を選べ。

正解

B. int studentAge = 20;

解説

わかりやすい変数名は、コードの可読性を大きく向上させます。

良い変数名の原則

  1. 役割が分かる名前:何のデータかが一目でわかる
  2. 英語を使う:日本語は文字化けのリスクがある
  3. キャメルケース:複数の単語は2語目から大文字(studentAge, userName

比較例

// ❌ 悪い例
int a = 20;        // 何の数字か分からない
int 年齢 = 20;      // 日本語は避ける
int x123 = 20;     // 意味不明

// ✅ 良い例
int studentAge = 20;    // 学生の年齢と分かる
int temperature = 25;   // 温度と分かる
int itemCount = 5;      // アイテム数と分かる

命名規則

  • 小文字で始める(age, userName
  • 2語目以降は大文字(studentAge, maxScore
  • 数字は使えるが、先頭には使えない(age1 はOK、1age はNG)

以下のコードの空欄を埋めて、整数同士の割り算を小数で計算する処理と、小数を整数に変換する処理を完成させよ。

int count = 5; double average =
count / 2; double price = 12.8; int discountPrice =
price;

解答例
int count = 5; double average = (double) count / 2; double price = 12.8; int discountPrice = (int) price;
解説

型変換 とは、ある型の値を別の型として扱えるようにすることである。

int count = 5;
double average = (double) count / 2;

double price = 12.8;
int discountPrice = (int) price;

このコードでは、countdouble に変換してから割り算しているため、結果は小数で扱われる。 ここで重要なのは、代入先が double でも、先に count / 2 が整数同士で計算される 点である。 つまり、double average = count / 2; と書くと、count / 2 は先に 2 になり、その後で 2.0 に変換されるだけである。

また、priceint に変換すると、小数部分は切り捨てられる。

ポイント

  • int から double への代入は自動変換されることがある
  • ただし、整数同士の割り算を小数で計算したい場合は、割り算の前に どちらかを double にする必要がある
  • double から int への変換は、小数部分が失われるため注意が必要である
  • 明示的に型を変えるときは、(double)(int) のように書く

変数のスコープの説明として正しいものを選べ。

正解

B. 変数が使える範囲のこと

解説

**スコープ(scope)**とは、変数が使える範囲のことです。

変数は、宣言された場所から、その変数を囲む{}(波括弧)の終わりまで使えます。

public class Example {
    public static void main(String[] args) {
        int a = 10;  // mainメソッド全体で使える

        if (a > 5) {
            int b = 20;  // このifブロック内でのみ使える
            System.out.println(a);  // OK
            System.out.println(b);  // OK
        }

        System.out.println(a);  // OK
        // System.out.println(b);  // エラー!bはifブロックを出ると使えない
    }
}

スコープの原則

  1. 変数は宣言された場所から、最も近い}まで使える
  2. {}の外では使えない
  3. 内側のブロックでは外側の変数を使える
  4. 外側のブロックでは内側の変数を使えない

なぜスコープが重要か

  • 変数の有効範囲を制限することで、予期しないバグを防ぐ
  • 必要な場所でのみ変数を使うことで、コードが読みやすくなる
  • メモリを効率的に使える(スコープを抜けると変数が破棄される)

問題

以下のコードの空欄を埋めて、円周率3.14を変更できない定数PIとして宣言してください。

double PI =
;

解答例
final double PI = 3.14;
解説

finalキーワードを使うと、値を変更できない定数を作ることができます。

final double PI = 3.14;
// PI = 3.14159;  // エラー!finalで宣言された変数は変更できない

finalの特徴

  • 型の前にfinalを付ける
  • 一度代入したら、二度と変更できない
  • 定数名は全て大文字で書くのが慣習(PI, MAX_VALUE
  • 変更されると困る値(円周率、税率など)に使う

使い分け

// 変更される可能性がある → finalなし
int age = 25;
age = 26;  // OK

// 変更されてはいけない → finalあり
final double TAX_RATE = 0.1;
// TAX_RATE = 0.08;  // エラー!

定数の命名規則

  • 全て大文字で書く:PI, MAX_SCORE
  • 複数の単語はアンダースコアで区切る:TAX_RATE, MAX_VALUE

以下のコードのうち、エラーなく実行できるものを すべて 選べ。

正解

A. int x = 10; double y = x;

解説

型が異なる変数への代入は、原則としてエラーになります。

ただし、小さい型から大きい型への代入は自動的に変換されます(暗黙の型変換)。

各選択肢の解説

A: int x = 10; double y = x; → ✅ OK

  • int(整数)からdouble(小数)への代入は可能
  • intの値がdoubleに自動変換される(1010.0
  • 情報が失われないため、Javaが自動で変換してくれる

B: double x = 3.14; int y = x; → ❌ エラー

  • double(小数)からint(整数)への代入は不可
  • 小数点以下が切り捨てられてしまう(情報が失われる)
  • キャスト(型変換)が必要:int y = (int)x;

C: String x = "100"; int y = x; → ❌ エラー

  • String(文字列)からint(整数)への代入は不可
  • 型が全く異なるため自動変換されない
  • 変換するには:int y = Integer.parseInt(x);

D: int x = 10; String y = x; → ❌ エラー

  • int(整数)からString(文字列)への代入は不可
  • 型が全く異なるため自動変換されない
  • 変換するには:String y = String.valueOf(x);

型変換の原則

  • 小→大はOKbyteintlongfloatdouble
  • 大→小はNG:情報が失われる可能性があるため、明示的なキャストが必要
  • 文字列と数値間はNG:専用のメソッドで変換が必要