#目的
Java言語を含めたプログラミングの学習を始めたばかりの方、既学習者の方は復習用に、
変数の宣言、初期化、データ型を学ぶ為に書いています。
【Java入門目次】
今回は変数と型についてです。
・変数と型 ←今ここ
・型変換
・変数のスコープ
・文字列の操作
・配列の操作
・演算子
・条件分岐
・繰り返し処理
・クラスについて(準備中)
・抽象クラス(準備中)
・インターフェース(準備中)
・カプセル化(準備中)
・モジュールについて(準備中)
・例外処理について
・ラムダ式について
・Stream APIについて
#変数の宣言と初期化
変数とは、
プログラム内で使用するデータを保持するための入れ物。
他の変数と区別する為に、
Java言語においては、変数を宣言する際に以下を注意しなければいけません。
・数値や文字列など、どんな値が格納されるのか
・どんな名前にするのか
・最初に格納する値は何なのか
##変数の宣言
データ型 変数名;
とする必要がある。
(データ型については後述します)
class Main {
public static void main(String args[]) {
// 変数の宣言
int num;
// 出力しようとするとエラーになる
System.out.println(num); // The local variable num may not have been initialized
}
}
このエラーは、変数の宣言はされているが、初期化されていない、
値がセットされていない、変数を使用したために起きる。
##変数の初期化
データ型 変数名;
とした後、
変数名 = 値;
とする必要がある。
class Main {
public static void main(String args[]) {
// 変数の宣言
int num;
// 変数の初期化(numに10を代入)
num = 10;
// 出力
System.out.println(num); // 10
}
}
1.変数名「num」を宣言
2.numに10を代入して初期化している。(値をセット)
3.出力
##変数の宣言と初期化を同時に
データ型 変数名 = 値;
とすることも可能。
class Main {
public static void main(String args[]) {
// 変数の宣言と初期化
int num = 10;
// 出力
System.out.println(num); // 10
}
}
##変数名のルール
・先頭文字は以下のみ使用可能。
アルファベット(a~z、A~Z)、ドル記号($)、アンダースコア(_)
・2文字目以降は数字も使用可能。
・大文字小文字は厳密に区別される。
・文字数(長さ)の制限はない。
・null,true,falseは使用不可。
・予約語は使用不可。
予約語とは、Java言語で既に使用されている名前の事。
例:if,while,switch など
予約語について詳細:公式ドキュメント
#型について
Javaでは、変数を宣言する際、データ型を指定
しなければいけませんでしたね。
データ型を大別すると以下になる。
・基本データ型(プリミティブ型)
・参照型
それぞれを見ていきましょう。
##基本データ型(プリミティブ型)
###boolean型
型 | サイズ | 値の範囲 |
---|---|---|
boolean | 1ビット | true/falseのどちらか |
class Main {
public static void main(String args[]) {
boolean a = true;
boolean b = false;
System.out.println(a); // true
System.out.println(b); // false
}
}
###整数型
整数データを扱っています。
型 | サイズ | 値の範囲 |
---|---|---|
byte | 8ビット | -128〜127 |
short | 16ビット | -32768~32767 |
int | 32ビット | -2147483648~2147483647 |
long | 64ビット | -9223372036854775808~9223372036854775807 |
System.out.println("byteの最小値= " + Byte.MIN_VALUE); // byteの最小値= -128
System.out.println("byteの最大値= " + Byte.MAX_VALUE); // byteの最大値= 127
System.out.println("shortの最小値= " + Short.MIN_VALUE); // shortの最小値= -32768
System.out.println("shortの最大値= " + Short.MAX_VALUE); // shortの最大値= 32767
System.out.println("intの最小値= " + Integer.MIN_VALUE); // intの最小値= -2147483648
System.out.println("intの最大値= " + Integer.MAX_VALUE); // intの最大値= 2147483647
System.out.println("longの最小値= " + Long.MIN_VALUE); // longの最小値= -9223372036854775808
System.out.println("longの最大値= " + Long.MAX_VALUE); // longの最大値= 9223372036854775807
byte < short < int < long
という関係ですね。
ちなみに最小値、最大値を超えると値が反転します。(桁溢れ)
System.out.println("前 byteの最小値= " + Byte.MIN_VALUE); // byteの最小値= -128
byte minByte = Byte.MIN_VALUE;
minByte--;
System.out.println("あと byteの最小値= " + minByte); // byteの最小値= 127 ←反転している
System.out.println("前 byteの最大値= " + Byte.MAX_VALUE); // byteの最大値= 127
byte maxByte = Byte.MAX_VALUE;
maxByte++;
System.out.println("あと byteの最大値= " + maxByte); // byteの最大値= -128 ←反転している
整数の計算をする時などに用いたりします。
int a = 1;
int b = 1;
int sum = a + b;
System.out.println(sum); // 3
####long型を使う時の注意
int型を超える整数を変数に格納する場合、末尾に「L」か「l」を付ける。
// エラーが出る
long longNumber = 214748364712342; // The literal 214748364712342 of type int is out of range
long longNumber = 214748364712342L; // 末尾に「L」か「l」を付けなければいけない。
System.out.println(longNumber); // 214748364712342
###浮動小数点型
小数点を含む数値のデータを扱っています。
型 | サイズ | 値の範囲 |
---|---|---|
float | 32ビット | ±1.40239846×10^-45~±3.40282347×10^38 |
double | 64ビット | ±4.94065645841246544×10^-324~±1.79769313486231570×10^308 |
System.out.println("floatの最小値= " + Float.MIN_VALUE); // floatの最小値= 1.4E-45
System.out.println("floatの最大値= " + Float.MAX_VALUE); // floatの最大値= 3.4028235E38
System.out.println("doubleの最小値= " + Double.MIN_VALUE); // doubleの最小値= 4.9E-324
System.out.println("doubleの最大値= " + Double.MAX_VALUE); // doubleの最大値= 1.7976931348623157E308
少数の計算をする時などに用いたりします。
// int型の割り算
int a = 10;
int b = 3;
int result1 = a / b;
System.out.println(result1); // 3
// float型の割り算
// 浮動小数点数は、デフォルトとして、double型として認識される
// float c = 10.0; // Type mismatch: cannot convert from double to float
float c = 10F; // よって、float型の変数に代入する時は末尾にFかfををつける
float d = 3f; // 同上
float result2 = c / d;
System.out.println(result2); // 3.3333333
// double型の割り算
double e = 10.0D; // Dまたはdを末尾につける
double f = 3.0; // ただ上述の通り、デフォルトでdobule型と認識されるので省略しても問題ない
double result3 = e / f;
System.out.println(result3); // 3.3333333333333335
###char型
1文字を表すのに扱うのに使われている。
データ型 | サイズ | 値の範囲 |
---|---|---|
char | 16ビット | 16ビットの文字コード |
1文字を扱うのに使われています。 |
####char型を使う時の注意
シングルクォーテーションで囲うこと。
1文字ではないとダメ。
// エラーが出る
char a = 'ああ'; // Invalid character constant
char a = "あ"; // Type mismatch: cannot convert from String to char
char a = 'あ';
System.out.println(a); // あ
##参照型
クラス、配列、インターフェースなどを含む基本データ型以外の型全ては、参照型になります。
変数が値そのものを保持するのではなく、値が置いてある場所を保持する。
どこに格納されているか参照しているので参照型。
public class Test {
public int number = 0;
}
class Main {
public static void main(String args[]) {
Test test = new Test();
test.number = 10;
System.out.println(test.number); // 10
Test test2 = new Test();
test2.number = 10;
System.out.println(test2.number); // 10
test = test2; // testにtest2の値を代入している訳ではなく、test2の値の置いてある場所を代入している
test.number = 99; // よって、ここでtestを99に変更したら、test2まで変更されてしまう。
System.out.println(test.number); // 99
System.out.println(test2.number); // 99
}
}
test = test2;は、
testにtest2の値を代入している訳ではなく、test2の値の置いてある場所
を代入している。
test.number = 99;
よって、testを99に変更したら、test2まで変更されてしまう。
###ラッパークラス
基本データ型の値を参照型として扱う事ができる。
参照型ではあるが、基本データ型と同じで値は変更されない。
値の置いてある場所ではなく、値そのものを代入している。
class Main {
public static void main(String args[]) {
Integer num = 10;
Integer num2 = 10;
System.out.println(num); // 10
System.out.println(num2); // 10
num = num2;
num = 99;
System.out.println(num); // 99
System.out.println(num2); // 10
String greet = "おはよう";
String greet2 = "こんにちは";
System.out.println(greet); // おはよう
System.out.println(greet2); // こんにちは
greet = greet2;
greet = "Good Morning";
System.out.println(greet); // Good Morning
System.out.println(greet2); // こんにちは
}
}
#終わりに
変数の宣言、初期化、データ型について学びました。
次回は型変換を掘り下げていこうと思います。