Day 2: 変数とデータ型
今日学ぶこと
- 変数の宣言と初期化
- プリミティブ型(8種類)
- 参照型の基礎
- 型変換(キャスト)
- 演算子
変数
変数は値を格納する箱です。Javaは静的型付け言語なので、変数を使う前に型を宣言する必要があります。
// 型 変数名 = 値;
int age = 25;
String name = "太郎";
double price = 1980.5;
boolean isActive = true;
変数の命名規則
// ✅ OK
int myAge = 25;
String firstName = "太郎";
final int MAX_SIZE = 100;
// ❌ NG
int 1stNumber = 10; // 数字で始まる
int my-age = 25; // ハイフン不可
int class = 1; // 予約語
| 規則 | 例 | 説明 |
|---|---|---|
| キャメルケース | myVariableName |
変数名・メソッド名 |
| パスカルケース | MyClassName |
クラス名 |
| アッパースネーク | MAX_VALUE |
定数 |
プリミティブ型
Javaには8つのプリミティブ型があります。
flowchart TB
subgraph Primitive["プリミティブ型"]
subgraph Integer["整数型"]
Byte["byte<br>8bit"]
Short["short<br>16bit"]
Int["int<br>32bit"]
Long["long<br>64bit"]
end
subgraph Float["浮動小数点型"]
FloatT["float<br>32bit"]
Double["double<br>64bit"]
end
Char["char<br>16bit"]
Bool["boolean<br>true/false"]
end
style Int fill:#3b82f6,color:#fff
style Double fill:#22c55e,color:#fff
style Char fill:#f59e0b,color:#fff
style Bool fill:#8b5cf6,color:#fff
整数型
byte b = 127; // -128 〜 127
short s = 32767; // -32,768 〜 32,767
int i = 2147483647; // -2^31 〜 2^31-1(約21億)
long l = 9223372036854775807L; // -2^63 〜 2^63-1
| 型 | サイズ | 範囲 | 用途 |
|---|---|---|---|
byte |
1バイト | -128〜127 | バイナリデータ |
short |
2バイト | -32,768〜32,767 | あまり使わない |
int |
4バイト | 約±21億 | 最も一般的 |
long |
8バイト | 約±922京 | 大きな数値 |
推奨: 整数には基本的に**
int**を使いましょう。longは末尾にLを付けます。
浮動小数点型
float f = 3.14f; // 末尾に f が必要
double d = 3.14159; // デフォルト
| 型 | サイズ | 精度 | 用途 |
|---|---|---|---|
float |
4バイト | 約7桁 | あまり使わない |
double |
8バイト | 約15桁 | 最も一般的 |
推奨: 小数には基本的に**
double**を使いましょう。
文字型と論理型
char c = 'A'; // シングルクォート
char jp = 'あ'; // Unicode文字
boolean flag = true; // true または false
参照型の基礎
プリミティブ型以外はすべて参照型です。代表例はStringです。
String greeting = "こんにちは";
String name = new String("太郎");
// Stringは特別:+で連結できる
String message = greeting + "、" + name + "さん!";
System.out.println(message); // こんにちは、太郎さん!
プリミティブ型と参照型の違い
flowchart LR
subgraph Prim["プリミティブ型"]
Var1["age = 25"]
Stack1["スタック: 25"]
end
subgraph Ref["参照型"]
Var2["name"]
Stack2["スタック: 参照"]
Heap["ヒープ: \"太郎\""]
end
Var1 --> Stack1
Var2 --> Stack2 --> Heap
style Prim fill:#3b82f6,color:#fff
style Ref fill:#22c55e,color:#fff
| 特徴 | プリミティブ型 | 参照型 |
|---|---|---|
| 格納される値 | 値そのもの | メモリアドレス(参照) |
| デフォルト値 | 0, false |
null |
| 例 | int, boolean |
String, 配列 |
var(ローカル変数の型推論)
Java 10以降、varで型推論が使えます。
var count = 10; // int と推論
var name = "太郎"; // String と推論
var price = 19.99; // double と推論
var items = new ArrayList<String>(); // ArrayList<String> と推論
注意:
varはローカル変数のみで使用可能です。フィールドやメソッドの引数には使えません。
定数(final)
final int MAX_SIZE = 100;
final double TAX_RATE = 0.10;
final String APP_NAME = "MyApp";
// MAX_SIZE = 200; // ❌ コンパイルエラー
慣習: 定数はアッパースネークケース(
MAX_SIZE)で命名します。
型変換(キャスト)
暗黙的変換(拡大変換)
小さい型→大きい型は自動的に変換されます。
int i = 100;
long l = i; // int → long(自動)
double d = i; // int → double(自動)
明示的変換(縮小変換)
大きい型→小さい型はキャストが必要です。
double d = 3.99;
int i = (int) d; // 3(小数点以下切り捨て)
long l = 100L;
int j = (int) l; // 100
flowchart LR
Byte["byte"] --> Short["short"] --> Int["int"] --> Long["long"] --> Float["float"] --> Double["double"]
style Int fill:#3b82f6,color:#fff
style Double fill:#22c55e,color:#fff
注意: 縮小変換ではデータが失われる可能性があります。
演算子
算術演算子
int a = 10, b = 3;
System.out.println(a + b); // 13(加算)
System.out.println(a - b); // 7(減算)
System.out.println(a * b); // 30(乗算)
System.out.println(a / b); // 3(整数除算)
System.out.println(a % b); // 1(剰余)
注意: 整数同士の除算は小数点以下が切り捨てられます。
10 / 3は3です。
代入演算子
int x = 10;
x += 5; // x = x + 5 → 15
x -= 3; // x = x - 3 → 12
x *= 2; // x = x * 2 → 24
x /= 4; // x = x / 4 → 6
x %= 4; // x = x % 4 → 2
インクリメント・デクリメント
int count = 0;
count++; // 1(後置)
++count; // 2(前置)
count--; // 1(後置)
--count; // 0(前置)
比較演算子
int a = 10, b = 20;
a == b // false(等しい)
a != b // true(等しくない)
a > b // false(より大きい)
a < b // true(より小さい)
a >= b // false(以上)
a <= b // true(以下)
論理演算子
boolean x = true, y = false;
x && y // false(AND)
x || y // true(OR)
!x // false(NOT)
文字列操作の基礎
String s = "Hello, Java!";
s.length() // 12(文字数)
s.charAt(0) // 'H'(0番目の文字)
s.toUpperCase() // "HELLO, JAVA!"
s.toLowerCase() // "hello, java!"
s.contains("Java") // true
s.startsWith("Hello") // true
s.substring(0, 5) // "Hello"
s.replace("Java", "World") // "Hello, World!"
s.trim() // 前後の空白を除去
s.isEmpty() // false
重要:
Stringは**不変(immutable)**です。メソッドを呼んでも元の文字列は変わりません。
実践: BMI計算プログラム
public class BmiCalculator {
public static void main(String[] args) {
double height = 1.70; // メートル
double weight = 65.0; // キログラム
double bmi = weight / (height * height);
System.out.println("=== BMI計算 ===");
System.out.printf("身長: %.2f m%n", height);
System.out.printf("体重: %.1f kg%n", weight);
System.out.printf("BMI: %.1f%n", bmi);
// 判定
String category;
if (bmi < 18.5) {
category = "低体重";
} else if (bmi < 25.0) {
category = "普通体重";
} else if (bmi < 30.0) {
category = "肥満(1度)";
} else {
category = "肥満(2度以上)";
}
System.out.printf("判定: %s%n", category);
}
}
まとめ
| 概念 | 説明 |
|---|---|
| 変数 | 型を宣言して値を格納 |
| プリミティブ型 | int, double, boolean, char 等8種類 |
| 参照型 | Stringなど、オブジェクトを参照 |
var |
ローカル変数の型推論(Java 10+) |
final |
定数(再代入不可) |
| キャスト | (int) 3.14 で型変換 |
| 演算子 | 算術、比較、論理、代入 |
重要ポイント
- 整数は**
int、小数はdouble**を基本にする Stringは参照型で不変- 整数同士の除算は小数点以下が切り捨て
- 型変換は拡大変換は自動、縮小変換はキャスト必要
練習問題
問題1: 基本
円の半径(double)を変数に代入し、面積と周長を計算して表示するプログラムを作成してください。
問題2: 応用
華氏温度を摂氏温度に変換するプログラムを作成してください(摂氏 = (華氏 - 32) × 5 / 9)。
チャレンジ問題
秒数(int)を「X時間Y分Z秒」の形式で表示するプログラムを作成してください(例:3661秒 → 1時間1分1秒)。
参考リンク
次回予告: Day 3では「制御構文」について学びます。if文、switch文、ループをマスターしましょう。