1. Javaの「変数」とは
Javaを学び始めたとき、最初に登場する重要な概念が「変数」です。
変数を一言で言うなら、プログラムの中で値(データ)を一時的に保存して、何度でも使い回すための入れ物です。
ただしJavaでは、単なる「箱」として覚えるだけだとすぐにつまずきます。
なぜならJavaの変数は、「型(データの種類)」とセットで扱う言語だからです。
このセクションでは、変数の役割と、Javaらしい考え方(型の重要性)を初心者向けに整理します。
1.1 変数でできること(値を保存して再利用する)
変数があると、プログラムは「その場限りの計算」から「意味のある処理」に変わります。
たとえば、次のように数値をそのまま書くことはできます。
System.out.println(100 + 20);これでも動きますが、値に意味がないので、後から読む人(未来の自分も含む)が困ります。
「100は何?」「20は何?」が分からないからです。
変数を使うと、値に意味を与えられます。
int price = 100;
int tax = 20;
System.out.println(price + tax);このように変数を使うと、次のメリットがあります。
- 意味が伝わりやすい(priceやtaxなど名前で意図が分かる)
- 値を何度でも使い回せる(同じ値を何回も書かなくていい)
- あとから変更しやすい(税率が変わっても変数の値を変えるだけ)
- 計算の途中結果を保持できる(複雑な処理を分解できる)
特に初心者のうちは、まず「変数=値に名前を付ける」くらいの感覚でOKです。
ただし、Javaでは次に説明する「型」が必ずセットになります。
1.2 Javaの変数は「型」とセットで扱う(型安全)
Javaの変数は、基本的に次の形で作ります。
型 変数名 = 値;例:
int age = 20;
String name = "Sagawa";ここで重要なのが 型 です。
intは整数(例:20、100、-5)Stringは文字列(例:”Hello”、”Java”)
Javaでは、変数を作るときに「この変数にはどんな種類の値を入れるのか」を明確に宣言します。
この仕組みによって、Javaは次のような強みを持ちます。
型安全(type-safe)とは何か
型を指定しているおかげで、間違った値を入れようとしたときに、Javaが止めてくれることがあります。
たとえば int の変数に文字列を入れようとすると、コンパイルエラーになります。
int age = "20"; // これはエラーこれは不便ではなく、むしろ便利です。
「実行してから壊れる」のではなく、「実行前に間違いを検出できる」からです。
初心者が「Javaはエラーが多い」と感じる原因の一部はここですが、見方を変えるとこう言えます。
- Javaは型の不整合を早い段階で見つけてくれる
- 大きな開発ほど、型があることで事故が減る
この「型と変数がセット」という考え方は、Javaの基本中の基本です。
参考:同じ“変数”でも「値」と「参照」がある
Javaの変数には、大きく分けて次の2種類の扱い方があります。
- プリミティブ型:値そのものを扱う(例:
int,double,boolean) - 参照型:値そのものではなく、値が置かれている場所(参照)を扱う(例:
String, 配列, クラス)
ここでは深掘りしませんが、初心者が混乱しやすいポイントなので、先に軽く触れておきます。
例えば String は参照型です。
見た目は「文字列を入れている」ように見えても、厳密には「文字列オブジェクトへの参照を持っている」イメージです。
この違いは、あとで学ぶ「== と equals の違い」や「finalの挙動」にも関係してきます。
2. 変数の基本:宣言・代入・初期化の違い
Javaの変数を正しく理解するためには、
「宣言」「代入」「初期化」という3つの言葉の違いを整理することが重要です。
初心者の方は、この3つをなんとなく同じ意味で使ってしまいがちですが、
実際には役割がはっきり分かれています。
ここを曖昧なまま進むと、
「なぜエラーになるのか分からない」「なぜ使えないのか分からない」
という状態に陥りやすくなります。
2.1 宣言(declare)とは:変数を使う準備をする
宣言とは、
「この名前の変数を使いますよ」「型はこれですよ」
とJavaに伝える行為です。
最も基本的な宣言は次の形です。
int count;この時点で行われていることは以下の2点だけです。
countという名前の変数を作る- その変数の型は
int(整数)であると決める
まだ値は入っていません。
初心者がよく勘違いするポイントですが、
宣言しただけでは変数は「使える状態」にはなっていません。
2.2 代入(assign)とは:変数に値を入れる
代入とは、
すでに宣言されている変数に対して、値を入れることです。
count = 10;この = は数学の「等しい」ではなく、
右の値を左の変数に入れるという意味です。
ここでの流れを整理すると、
int count; // 宣言
count = 10; // 代入となります。
注意点:宣言されていない変数には代入できない
次のコードはエラーになります。
count = 10; // エラー:countが宣言されていないJavaでは、必ず宣言 → 代入の順序が必要です。
2.3 初期化(initialize)とは:宣言と同時に値を入れる
初期化とは、
宣言と代入を同時に行うことです。
int count = 10;これは次の2行と意味的に同じです。
int count;
count = 10;Javaでは、実務でも学習でも、
ほとんどの場合は「初期化」を使うと考えて問題ありません。
なぜなら、次のメリットがあるからです。
- 変数を作った瞬間に使える状態になる
- 未初期化によるエラーを防げる
- コードが読みやすくなる
そのため、初心者のうちは
「変数は宣言と同時に初期化する」
という癖を付けるのがおすすめです。
2.4 宣言だけでは使えない理由(ローカル変数のルール)
Javaでは、**ローカル変数(メソッド内の変数)**に関して、
非常に厳密なルールがあります。
次のコードはコンパイルエラーになります。
int number;
System.out.println(number); // エラー理由は明確で、
ローカル変数は、初期化しないと使えない
というルールがあるからです。
Javaは「numberの中に何が入っているか分からない状態」を
危険な状態とみなし、実行前にエラーとして止めます。
これは初心者にとって厳しく感じるかもしれませんが、
大規模開発では非常に重要な安全装置です。
2.5 複数の変数をまとめて扱う書き方(注意点あり)
Javaでは、同じ型の変数をまとめて宣言することもできます。
int x, y, z;また、次のように書くことも可能です。
int a = 1, b = 2, c = 3;文法的には正しいですが、可読性は下がりやすいため注意が必要です。
特に初心者やチーム開発では、
int a = 1;
int b = 2;
int c = 3;のように、1行1変数で書く方が安全です。
2.6 このセクションのまとめ
このセクションで押さえておきたいポイントは次の通りです。
- 宣言:変数の名前と型を決める
- 代入:変数に値を入れる
- 初期化:宣言と同時に値を入れる
- ローカル変数は初期化しないと使えない
- 初心者のうちは「宣言+初期化」を基本にする
3. 変数の「型」を理解する(プリミティブ型と参照型)
Javaの変数を扱ううえで、型の理解は避けて通れません。
特に初心者が混乱しやすいのが、
- なぜ型がこんなに多いのか
- 数値なのに
intやdoubleがある理由 Stringは数値型と何が違うのか
といった点です。
このセクションでは、Javaの型を
「プリミティブ型」と「参照型」という2つの視点から整理します。
3.1 Javaの型は大きく2種類に分かれる
Javaの変数の型は、大きく次の2つに分類できます。
- プリミティブ型(基本型)
- 参照型(オブジェクト型)
この分類を理解すると、後で学ぶ「== と equals」「finalの挙動」「メモリの考え方」が一気に分かりやすくなります。
3.2 プリミティブ型とは(値そのものを扱う型)
プリミティブ型は、値そのものを直接扱う型です。
代表的なプリミティブ型をいくつか見てみましょう。
int count = 10;
double price = 19.99;
boolean isActive = true;これらの変数は、
「値そのもの」を変数の中に保持しています。
よく使われるプリミティブ型
| 型 | 意味 | 使用例 |
|---|---|---|
int | 整数 | 個数、年齢、回数 |
long | 大きな整数 | 金額、ID |
double | 小数 | 価格、割合 |
boolean | 真偽値 | フラグ判定 |
char | 1文字 | 文字処理 |
初心者のうちは、int・double・booleanをまず押さえておけば十分です。
3.3 プリミティブ型の特徴と注意点
プリミティブ型には、次の特徴があります。
- 値そのものを持つ
- 処理が高速
nullを代入できない- サイズが固定されている
例えば次のコードでは、a と b は完全に独立した値を持ちます。
int a = 5;
int b = a;
b = 10;このとき、
aは 5 のままbは 10 に変わる
という結果になります。
コピーされたのは値そのものだからです。
3.4 参照型とは(値の場所を扱う型)
一方、参照型は
値そのものではなく、値が存在する場所(参照)を扱う型です。
代表的な参照型には次のようなものがあります。
String name = "Java";
int[] numbers = {1, 2, 3};String- 配列
- クラス
- インターフェース
- List / Map などのコレクション
これらはすべて参照型です。
イメージで理解する参照型
参照型の変数は、
- 実体(オブジェクト)そのもの
ではなく、 - 実体が置かれている場所への「住所」
を持っているイメージです。
3.5 参照型を代入すると何が起きるか
次のコードを見てください。
String a = "Hello";
String b = a;
b = "World";この場合、
aは “Hello”bは “World”
になります。
ここだけを見ると、
「プリミティブ型と同じじゃないか?」と思うかもしれません。
では、次の例はどうでしょう。
int[] array1 = {1, 2, 3};
int[] array2 = array1;
array2[0] = 100;この結果は、
array1[0]→ 100array2[0]→ 100
になります。
これは、array1 と array2 が同じ配列を参照しているからです。
参照型では、
- 変数を代入すると「同じ実体を指す」
- 中身を変更すると、参照しているすべてに影響する
という特徴があります。
3.6 初心者が混乱しやすいポイント
ここで、初心者がよくつまずくポイントを整理します。
- プリミティブ型
→ 値がコピーされる - 参照型
→ 参照(場所)がコピーされる
この違いは、次のトピックと強く関係します。
==と.equals()の違いfinalを付けたときの挙動- メソッド引数に渡したときの影響範囲
今は「参照型は同じ実体を共有することがある」
という点だけ覚えておけば十分です。
3.7 このセクションのまとめ
- Javaの型は プリミティブ型 と 参照型 に分かれる
- プリミティブ型は「値そのもの」を扱う
- 参照型は「値の場所(参照)」を扱う
- 参照型では、代入や変更が他の変数に影響することがある
4. 変数の種類(置き場所)とスコープ(有効範囲)
Javaの変数は、「型」だけでなく
どこで宣言されているか(置き場所)によっても性質が変わります。
この違いを理解していないと、
- 「さっき宣言した変数が使えない」
- 「同じ名前なのに値が違う」
- 「なぜここでは参照できないのか分からない」
といった混乱が起きがちです。
このセクションでは、
変数の種類とスコープ(有効範囲)を初心者向けに整理します。
4.1 スコープとは何か(変数が使える範囲)
スコープとは、
その変数を使用できる範囲のことです。
Javaでは、
- 変数を宣言した場所
- 波かっこ
{ }の範囲
によって、スコープが厳密に決まります。
基本ルールはとてもシンプルです。
変数は、宣言されたブロックの中でのみ使える
4.2 ローカル変数(メソッド内の変数)
ローカル変数は、
メソッドやブロック(if、for など)の中で宣言される変数です。
public void sample() {
int x = 10; // ローカル変数
System.out.println(x);
}この x は、
sampleメソッドの中でのみ有効- メソッドの処理が終わると消える
という特徴があります。
ブロックによるスコープの例
if (true) {
int y = 5;
System.out.println(y);
}
System.out.println(y); // エラーy は if ブロックの中で宣言されているため、外側では使えません。
ローカル変数の重要なルール
ローカル変数には、次の厳しいルールがあります。
- 初期化しないと使えない
- デフォルト値は自動で入らない
int value;
System.out.println(value); // コンパイルエラーこれはJavaが「不定な値を使わせない」ための安全設計です。
4.3 フィールド(インスタンス変数)
フィールドは、
クラスの中で、メソッドの外に宣言される変数です。
public class Sample {
int count; // フィールド(インスタンス変数)
public void printCount() {
System.out.println(count);
}
}フィールドには、ローカル変数とは異なる特徴があります。
- クラスのインスタンスごとに持つ
- 自動的に初期値が入る
- クラス内のどのメソッドからも使える
フィールドのデフォルト値
型ごとに、次のような初期値が自動で設定されます。
int→ 0double→ 0.0boolean→ false- 参照型 → null
そのため、次のコードはエラーになりません。
public class Sample {
int count;
public void print() {
System.out.println(count); // 0
}
}ただし、デフォルト値に頼りすぎるのは非推奨です。
明示的に初期化した方が、コードの意図が明確になります。
4.4 static変数(クラス変数)
static が付いた変数は、
クラス全体で共有される変数になります。
public class Counter {
static int total = 0;
}この total は、
- クラスに1つだけ存在する
- すべてのインスタンスで共有される
という特徴を持ちます。
static変数のイメージ
- インスタンス変数 → 人ごとの財布
- static変数 → 会社の共有金庫
と考えると分かりやすいです。
static変数の注意点
static変数は便利ですが、状態を持たせすぎるとバグの原因になります。
- どこで変更されたか追いにくい
- テストが難しくなる
- 並行処理で問題が起きやすい
初心者のうちは、
- 定数
- 共有設定値
といった用途に限定して使うのがおすすめです。

4.5 同じ名前の変数に注意(シャドーイング)
次のようなコードを見てください。
public class Sample {
int value = 10;
public void test() {
int value = 5;
System.out.println(value);
}
}この場合、出力されるのは 5 です。
これは、
ローカル変数がフィールドを隠している(シャドーイング)
状態だからです。
初心者が混乱しやすい原因になるため、
- 変数名の重複は避ける
- 意図的でない限り同名を使わない
ことが重要です。
4.6 このセクションのまとめ
- スコープとは「変数が使える範囲」
- ローカル変数はブロック内のみ有効で、初期化が必須
- フィールドは自動的に初期値が入る
- static変数はクラス全体で共有される
- 同じ名前の変数によるシャドーイングに注意
5. Java 10以降の var(型推論)を正しく使う
Java 10から導入された var は、
変数の型をコンパイラに推論させる書き方です。
一見すると便利そうですが、使い方を誤ると「読みにくいコード」になりやすいため、ルールと使いどころを理解することが重要です。
5.1 var とは何か(型を書かなくてよい仕組み)
通常のJavaでは、変数を次のように宣言します。
String message = "Hello";var を使うと、次のように書けます。
var message = "Hello";このときJavaは、右辺 "Hello" を見て、
- この変数は
String型だな
と判断します。
重要なのは、var は動的型付けではないという点です。
- コンパイル時に型は確定する
- 実行時に型が変わることはない
つまり、var は「型を書かなくてよい省略記法」だと考えてください。
5.2 var が使える場所・使えない場所
var には、使える場所が厳密に決められています。
使える場所
- ローカル変数のみ
public void sample() {
var count = 10;
}使えない場所
次のような使い方はすべてエラーになります。
var x; // 初期化なし → エラー
var y = null; // 型が推論できない → エラー
class Sample {
var value = 10; // フィールドでは使えない → エラー
}この制限がある理由は明確で、可読性と安全性を下げないためです。
5.3 var を使うメリット
var が本領を発揮するのは、
型が長くなりがちな場面です。
ArrayList<String> list = new ArrayList<String>();これを var で書くと、
var list = new ArrayList<String>();非常にスッキリします。
このように var は、
- ジェネリクスが長い場合
- 右辺を見れば型が明確な場合
に使うと、可読性が向上します。
5.4 var の落とし穴(初心者がやりがちな失敗)
便利な var ですが、
初心者が多用すると次のような問題が起きます。
型が分かりにくくなる
var data = getData();このコードだけでは、
- dataは何型なのか
- 中身は何なのか
が分かりません。
この場合は、素直に型を書いた方が安全です。
Data data = getData();意図しない型になることがある
var number = 10; // int「long にしたつもりだった」
というケースも、初心者ではよく起きます。
型を明示しないことで、自分の意図と実際の型がズレる可能性がある点には注意が必要です。
5.5 var を使うかどうかの判断基準
迷ったときは、次の基準で判断すると失敗しにくくなります。
- 右辺を見れば型が一目で分かる →
varOK - 型が重要な意味を持つ → 明示的に型を書く
- 初心者向け・学習用コード → なるべく型を書く
- チーム開発 → コーディング規約に従う
特に学習段階では、
型を書くことで理解が深まるため、
無理に var を使う必要はありません。
5.6 このセクションのまとめ
varは型推論のための省略記法- 動的型付けではなく、コンパイル時に型は確定する
- ローカル変数で、初期化が必須
- 可読性が上がる場面と下がる場面を見極めることが重要
6. 変数を「変えたくない」— final と定数の考え方
Javaでは、「一度決めた値を、あとから変更させない」という設計がとても重要です。
そのために使われるのが final です。
初心者のうちは「final は定数に付けるもの」という印象を持ちがちですが、実際にはもっと広い意味を持っています。
6.1 final とは何か(再代入を禁止する)
final を付けた変数は、一度値を代入すると、再代入できなくなります。
final int maxCount = 10;
maxCount = 20; // コンパイルエラーこのルールは非常にシンプルです。
- 初期化はできる
- 再代入はできない
これだけ覚えておけば問題ありません。
6.2 ローカル変数に final を付ける意味
ローカル変数に final を付けると、
- この変数は途中で変わらない
- 値が固定である
という意図をコード上で明確に示せます。
final int basePrice = 100;
int total = basePrice + 20;このように書いておくと、
- 誤って値を変更する事故を防げる
- コードを読む人が安心できる
というメリットがあります。
6.3 フィールドに final を付ける場合
フィールドに final を付けると、
そのインスタンスにとって不変の値になります。
public class User {
final String name;
public User(String name) {
this.name = name;
}
}この場合、
nameはコンストラクタで一度だけ設定できる- それ以降は変更不可
というルールになります。
これは、オブジェクトの状態を安定させるための重要な設計手法です。
6.4 final と参照型の注意点(初心者が混乱しやすい)
ここは非常に重要なポイントです。
final int[] numbers = {1, 2, 3};
numbers[0] = 100; // これはOK
numbers = new int[]{4, 5, 6}; // これはエラーなぜこうなるのでしょうか?
理由は、final が制限しているのは「参照の再代入」だからです。
- 配列そのものの中身を変える → OK
- 配列の参照先を変える → NG
つまり、final は「中身を不変にする」わけではありません。
この違いを理解していないと、
- 「finalなのに値が変わるじゃないか」
- 「バグでは?」
と混乱してしまいます。
6.5 定数とは何か(static final)
Javaでいう「定数」は、
慣例的に static final を使って定義されます。
public class Config {
public static final int MAX_USERS = 100;
}この定数の特徴は次の通りです。
- クラス全体で共有される
- 値は変更できない
- 意味を持つ名前を付けられる
定数の命名規則
定数は、一般的に次の形式で書かれます。
UPPER_SNAKE_CASE例:
static final double TAX_RATE = 0.1;6.6 final を使うべき判断基準
初心者のうちは、次の基準で考えると分かりやすいです。
- 値が途中で変わる必要がない →
finalを付ける - 設定値・基準値 →
static final - 意図せず変更されると困る →
final
特に実務では、
「迷ったら final を付ける」
くらいの意識でちょうど良い場合も多いです。
6.7 このセクションのまとめ
finalを付けると再代入できない- ローカル変数・フィールドのどちらにも使える
- 参照型の
finalは「中身不変」ではない - 定数は
static finalで定義する finalは安全で読みやすいコードを書くための道具
7. 初期値・デフォルト値・よくあるエラー集(初心者のつまずき回収)
ここまでで、変数の宣言・型・スコープ・var・final を学びました。
しかし実際には、「知識としては理解しているのにエラーになる」という場面が多くあります。
このセクションでは、初心者が特につまずきやすいポイントを、理由とセットで整理します。
7.1 ローカル変数には「デフォルト値」が入らない
まず、非常に重要なルールです。
ローカル変数には自動的な初期値は入らない
次のコードはコンパイルエラーになります。
public void sample() {
int x;
System.out.println(x); // エラー
}理由は単純で、Javaは「xに何が入っているか分からない」状態を許さないからです。
正しい書き方
public void sample() {
int x = 0;
System.out.println(x);
}ローカル変数は、必ず自分で初期化するというルールを徹底してください。
7.2 フィールドにはデフォルト値が自動で入る
一方で、**フィールド(インスタンス変数・static変数)**には
自動的に初期値が設定されます。
public class Sample {
int count;
boolean active;
String name;
}それぞれのデフォルト値は以下の通りです。
int→ 0double→ 0.0boolean→ false- 参照型 → null
そのため、次のコードはエラーになりません。
public class Sample {
int count;
public void print() {
System.out.println(count); // 0
}
}ただし、デフォルト値に頼る設計は非推奨です。
意図が分かりにくく、バグの温床になりやすいためです。
7.3 null によるエラー(NullPointerException)
参照型のデフォルト値は null です。
String text;この状態でメソッドを呼ぶと、実行時エラーが発生します。
System.out.println(text.length()); // NullPointerExceptionこれは初心者が最も遭遇しやすい例外の一つです。
対策の基本
- できるだけ初期化する
nullの可能性を考慮する- 意図せず
nullを使わない設計にする
String text = "";空文字で初期化するだけでも、多くの事故を防げます。
7.4 スコープ外の変数を使ってしまう
次のようなコードも、よくあるエラーです。
if (true) {
int value = 10;
}
System.out.println(value); // エラーこれは スコープ外参照 と呼ばれる問題です。
valueは if ブロック内のみ有効- ブロック外では存在しない
というルールを再確認してください。
7.5 同じ名前の変数による混乱(シャドーイング再確認)
public class Sample {
int value = 10;
public void test() {
int value = 5;
System.out.println(value);
}
}このコードで表示されるのは 5 です。
初心者は、
- フィールドの value が使われる
と誤解しがちですが、
より内側のスコープが優先されます。
シャドーイングは混乱の元なので、
- 変数名は役割ごとに明確に分ける
ことを意識しましょう。
7.6 型不一致によるコンパイルエラー
次のような代入はできません。
int number = 3.14; // エラー理由は、
double→intは自動変換されない
からです。
正しい書き方(意図がある場合)
int number = (int) 3.14; // 3ただし、小数点以下が切り捨てられる点には注意が必要です。
7.7 このセクションのまとめ
- ローカル変数は初期化必須
- フィールドにはデフォルト値が入るが、頼りすぎない
nullは実行時エラーの原因になりやすい- スコープ外の変数は使えない
- 型不一致はコンパイルエラーで防がれる
8. まとめ:Javaの変数で最初に押さえるべきポイント
この記事では、「Java 変数」というテーマについて、初心者が混乱しやすいポイントを順番に整理してきました。
最後に、ここまでの内容を実務でも学習でも役立つ形で要点整理します。
8.1 Javaの変数は「型・名前・値」のセットで考える
Javaの変数は、次の3点が必ずセットになります。
- 型:どんな種類の値を扱うのか
- 名前:何を表す値なのか
- 値:実際に保持するデータ
int count = 10;この1行の中に、
Javaの変数の本質がすべて詰まっています。
8.2 宣言・代入・初期化は明確に区別する
初心者が最初につまずきやすいポイントは、
この3つの違いを曖昧にしてしまうことです。
- 宣言:変数を使う準備
- 代入:値を入れる
- 初期化:宣言と同時に値を入れる
特にローカル変数では、
初期化しないと使えない
というルールを忘れないようにしましょう。
8.3 プリミティブ型と参照型の違いを意識する
Javaの型は、大きく次の2種類です。
- プリミティブ型:値そのものを扱う
- 参照型:値の場所(参照)を扱う
この違いを意識することで、
- 値のコピー
- 配列やオブジェクトの挙動
finalの意味
が自然と理解できるようになります。
8.4 スコープを理解するとエラーが激減する
変数は、
宣言された場所の中でしか使えません。
- ローカル変数 → ブロック内のみ有効
- フィールド → クラス全体で利用可能
- static変数 → クラスで共有される
「なぜ使えないのか分からない」と感じたら、まずスコープを疑う癖を付けましょう。
8.5 var と final は「目的」で使い分ける
var
→ 型が明確で、可読性が上がる場合のみ使うfinal
→ 値を変更させたくない意図を明確にする
どちらも便利ですが、使うこと自体が目的にならないよう注意が必要です。
8.6 初心者が安全に書くための指針
学習段階では、次の方針を意識すると失敗が減ります。
- 変数は宣言と同時に初期化する
- 型はできるだけ明示する
- 意味の分かる名前を付ける
- 迷ったら
finalを付けてみる
これだけでも、読みやすく、安全なJavaコードに近づきます。
8.7 次に学ぶと理解が深まるテーマ
変数の基礎を理解したら、次は次のテーマに進むのがおすすめです。
- 条件分岐(if / switch)
- 繰り返し(for / while)
- 配列とコレクション(List / Map)
- メソッドと引数
- オブジェクト指向の基本
変数は、すべてのJavaコードの土台です。
ここをしっかり理解しておくことで、その後の学習が格段にスムーズになります。

