変数の使い方について解説します。前回の解説の続きになります。
前回の解説はこちら phoeducation.work
変数の初期化
変数の宣言と同時に値を入れることを「初期化」といいます。
初期化は代入と同じように「=」記号で行いますが、内部的には異なる動作をしています。
しかし、通常の変数を使っている際にはあまり難しく考えず、変数の宣言と同時に初期化を行っている、と思って頂いても構いません。
変数の初期化を行う際に「=」記号の右側にある値を「初期値」と呼んでいます。
【変数の初期化】
public class FirstVariable2{ public static void main(String[ ] args){ // 変数の初期化を行う String shimei = "鈴木 幸一"; int kihonkyu = 200000; System.out.println(shimei); System.out.println(kihonkyu); } }
実行結果
鈴木 幸一 200000
[動画解説]
vimeo.com
定数
変数とはこれまで見たとおり、データを格納し、代入や再代入を行うことが可能です。
これに対して、変更がなく、代入や再代入を行わないものを、「定数」という形でプログラムの中に記述することができます。
書式は以下の通りです。
(文字列の場合) ”文字列” (数値の場合) 100などの数値
変数を宣言して、代入を行う際、この定数が出てきている点に注意してください。
前で作成したプログラムでは、下に抜き出した変数の初期化の部分が定数となります。
// 変数の初期化を行う String shimei = "鈴木 幸一"; int kihonkyu = 200000;
このプログラムの中で、「"鈴木 幸一"」や「200000」といった数値はプログラムの中に直接書いている定数です。
このような定数を「リテラル」と呼びます。
finalキーワード
finalというキーワードを変数の宣言の前につけることで、変数を定数化できます。
定数化された変数は再代入が行えない変数となります。
いわば、読み出しだけで、書き込み禁止状態になります。
定数化した変数の事を前述と同じように「定数」といいます。
定数を宣言する時は、初期値を必ず入れる必要があります。
定数ですので宣言以降で値を代入する事が出来ません。
値を代入できるのはあくまでも初期値として「=」で代入した場合のみです。
例えば、前のソースコードでint型の変数kihonkyuを変更したくない場合、「final」を変数の宣言の前に記述します。
このようにfinalを変数の宣言につけた場合、この変数への再代入ができなくなります。
// 変数の初期化を行う String shimei = "鈴木 幸一"; final int kihonkyu = 200000;
文字列変数の利用
ここでは、文字列変数を重点的に利用していきます。
文字列を格納するにはString型の変数を宣言する必要があります。
String型の変数を宣言する書式は以下の通りです。
String 変数名 [= 初期値 ];
通常の変数と同様に、初期値の部分は省略することが可能です。
String shimei = "鈴木 幸一"; String juusho;
1行目では、String型の変数”shimei”を宣言して、初期値として”鈴木 幸一”という文字列を入れています。
2行目では、String型の変数”juusho”を宣言して、初期値はまだ入れていません(後で何らかの値を入れます)。
【文字列変数】
public class FirstString{ public static void main(String[ ] args){ String str1 = "Hello"; // 初期値として文字列を入れる String str2; // 初期値なし str2 = "World"; // str2に文字列を入れる System.out.println(str1); // 2つの文字列を出力する System.out.println(str2); str1 = "Welcome to Java!"; // 違う文字列を入れてみる System.out.println(str1); // 出力する } }
実行結果
Hello World Welcome to Java!
[動画解説]
vimeo.com
文字列の連結
2つの文字列をつなげて1つの文字列にしたい場合があります。
2つ以上の文字列をつなげて1つの文字列にすることを、”文字列の連結”と呼びます。
文字列を連結するためには「+」を用います。書式は以下の通りです。
String型の変数(定数) + String型の変数(定数)
このようにString型の変数や文字列を操作する為の記号を「演算子」とよび、「+」記号は「+演算子」(「プラス演算子」と読む)と呼びます。
【文字列の連結】
public class FirstString2{ public static void main(String[ ] args){ String str1 = "Welcome"; String str2 = "Java"; System.out.println(str1); System.out.println(str2); System.out.println(str1 + " to " + str2); } }
実行結果
Welcome Java Welcome to Java
[動画解説]
vimeo.com
数値型変数の利用
変数の宣言はString型と同様に行います。
数値の変数も代入や再代入が可能である点はString型の変数と同じです。
数値型変数のデータは数値ですから、足し算や引き算、掛け算、割り算の計算が可能です。
Javaでは数値を大きく分けて次の2種類に分けて考えます。
- 1や25などの整数(小数点を含まない)
- 0.45や23.5などの小数点数
そして、格納される数値の大きさや精度によって更に細かく分かれています。
大きい数値を格納できるもの、小さい数値しか格納できないもの、また小数点以下の数値をどれくらい細かく保持するかによっても型が分かれています。
例えば、皆さんがテストの点数を管理するプログラムを作りたいと考えたとしましょう。
点数は0点から100点までです。この範囲であればbyte型で十分です。
しかし、国家予算を表したいのであれば、long型を使わなくてはならないでしょう。
浮動小数点(float, double)
例えば、1225や0.00873という数字を次のように表すことができます。
1.225 × 1000 8.73 × 0.001
この形式であれば、とても桁が大きな数字も、小数点以下の桁が大きい数字も表すことができます。
そして、このような数字の表し方を浮動小数点と呼びます。
浮動小数点とは次のような内部形式で数値を表す形式です。
(仮数部)×10の(指数部)乗
必ずしも小さな数字を表すのもではない点に注意が必要です。
浮動小数点は次の”指数部”と”仮数部”の2つを組み合わせて表現します。
浮動小数点と言う言葉は仮数部の小数点は固定していますが、指数部によって、実際の小数点の位置が変更されることが由来です。
内部的には以下の通りです。
16.23 * 100000 や 2.21 * 0.001
仮数部をどれだけ小さく、指数部をどれだけ大きく指定できるかが、表現できる値の大小に関わってきます。
値をある程度表現出来る幅(6-7桁)を持っているのがfloat型。
更に広い表現出来る幅(15-16桁)を持っているのがdouble型です。
float型を”単精度浮動小数点”、double型を”倍精度浮動小数点”と言います。
public class FirstNumberVariable{ public static void main(String[ ] args){ byte b = 1; short s = 10; int i = 100; double d; d = 10.56; System.out.println("b = " + b); System.out.println("s = " + s); System.out.println("i = " + i); System.out.println("d = " + d); } }
実行結果
b = 1 s = 10 i = 100 d = 10.56
リテラル
Javaのソースコードに記述された具体的な値や表記のことを「リテラル」と呼びます。
Java言語のリテラルは6種類に大別されます。
整数リテラル
Javaで扱える整数リテラルは10進数、8進数、16進数とJava SE7から追加された2進数です。
8進数は先頭に0(ゼロ)をつけると、8進リテラルとみなされます。
16進数は0x(ゼロ、エックス)、2進数は0b(ゼロ、ビー)を付けます。
16進数のxや2進数のbは大文字でも小文字でも構いません。
int val1 = 26; //10進数 int val2 = 032; // 8進数 int val3 = 0x1a; //16進数 int val4 = 0b11010; // 2進数 int val5 = 0b12010; //コンパイルエラー
上の例は、10進数の26を8進リテラル、16進リテラル、2進リテラルで表したものです。
変数val5に12010を2進数表現で代入しようとしていますが、2進数は0と1でしか表現できないため、コンパイルエラーとなります。
また、Java SE 7から整数リテラルを扱う際に、数字の途中に「_ 」(アンダースコア)を使用できるようになりました。
桁数の大きな数値リテラルなどにおいて、アンダースコアを入れることで読みやすくできます。
アンダースコア自身はコンピュータ内部では意味はありません。
int val1 = 10000; int val2 = 10_000; System.out.println("val1 = " + val1); //val1 = 10000 System.out.println("val2 = " + val2); //val2 = 10000 int val3 = 0b0011_1100_1111_0000; int val4 = 0b0011110011110000; System.out.println("val3 = " + val3); //val3 = 15600 System.out.println("val4 = " + val4); //val4 = 15600
上の例のval1とval2はどちらも10000という値を表しています。
val3とval4はどちらも2進数表現で10進数の15600を表しています。
val2やval4のように「_ 」(アンダースコア)を挿入することで、読みやすくなっています。
浮動小数点リテラル
小数部を持つ値であり、10進数、指数を表現できます。
double d = 10.56;
上の例では、10.56の小数点をdouble型に入れていますが、10.56はfloat型の範囲にも含まれています。
なぜメモリ消費が大きいほうのdouble型を使用しているのでしょうか。
それは、10.56というリテラルはdouble型として扱われているからです。
double型の数値を入れるのでdouble型の変数として宣言しているのです。
double型の変数dの宣言をfloat型に変更してコンパイルしてみてください。
エラーが出てコンパイルが出来ません。
Javaではfloat型の値としてソース上に記述する際には、キャストを行うか、数字の後ろに f をつけます。
float f = 10.56f;
数値の後ろに f と記述する事でその数値はfloat型のリテラルとして扱われます。
また浮動小数点を指数で表現できます。
double val1 = 3e4; System.out.println("val1 =" + val1); //val1 = 30000.0
上の例では30000.0と出力されます。30000.0は3.0×10の4乗のことです。
このような「10の4乗」の部分を指数と言い、アルファベットE(もしくはe)で表します。
文字リテラル
文字リテラルは1つの文字を表し、文字を「'」(シングルクォート)で囲みます。
その他にもUnicodeや「\」を付けたエスケープシーケンスで表すこともできます。
文字列リテラル
文字列リテラルは、複数の文字の集合である文字列を表します。
文字を「"」(ダブルクォート)で囲みます。
論理値リテラル
真(true)か偽(false)の値を表します。
nullリテラル
参照型のデータ型を使用する際に「何も参照していない」ということを表します。
【複数の変数の利用】
public class FirstVariableSample{ public static void main(String[ ] args){ String shimei = "鈴木 幸一"; int age = 28; String seinengappi = "1975年12月4日"; String shozoku = "総務"; int kihonkyuu = 200000; int bounus = 400000; double zangyou = 23.5; System.out.println("氏名: "+ shimei); System.out.println("年齢: "+ age); System.out.println("生年月日:"+ seinengappi); System.out.println("所属部署:"+ shozoku); System.out.println("基本給: "+ kihonkyuu); System.out.println("ボーナス:"+ bounus); System.out.println("先月残業:"+ zangyou); } }
実行結果
氏名: 鈴木 幸一 年齢: 28 生年月日:1975年12月4日 所属部署:総務 基本給: 200000 ボーナス:400000 先月残業:23.5
[動画解説]
vimeo.com
【リテラルの利用】
public class Literal{ public static void main(String[] args) { int val1 = 26; //10進数 int val2 = 032; //8進数 int val3 = 0x1a; //16進数 int val4 = 0b11010; //2進数 //int val5 = 0b12010; //コンパイルエラー System.out.println("val1 = " + val1); System.out.println("val2 = " + val2); System.out.println("val3 = " + val3); System.out.println("val4 = " + val4); int val5 = 10000; int val6 = 10_000; System.out.println("val5 = " + val5); System.out.println("val6 = " + val6); int val7 = 0b0011_1100_1111_0000; int val8 = 0b0011110011110000; System.out.println("val7 = " + val7); System.out.println("val8 = " + val8); double val9 = 3e4; System.out.println("val9 = " + val9); char val10 = 'A'; char val11 = '\u3012'; String val12 = "Hello"; boolean val13 = true; System.out.println("val10 = " + val10); System.out.println("val11 = " + val11); System.out.println("val12 = " + val12); System.out.println("val13 = " + val13); } }
実行結果
val1 = 26 val2 = 26 val3 = 26 val4 = 26 val5 = 10000 val6 = 10000 val7 = 15600 val8 = 15600 val9 = 30000.0 val10 = A val11 = 〒 val12 = Hello val13 = true
[動画解説]
vimeo.com
まとめ
文字列の変数
Javaプログラムでは文字列の変数はString型になります。
String型の変数や定数に対して+演算子で文字列の連結が可能です。
数値の変数
数値を保持する変数には整数を表すint型や浮動小数点を表すdouble型など様々な型があります。
リテラル
ソースコードに直接書き込んだ値やその表記をリテラルといい、整数リテラル、浮動小数点数リテラル、文字リテラル、文字列リテラル、論理値リテラル、nullリテラルがあります。
独学で挫折しそうになったら、オンラインプログラミングスクール