戻る
データ型
プログラミングで使う「変数」も数学の「変数」と同じである。具体的な数で計算する代わりに変数を使って演算を行う。
その変数には任意の数を代入することができる。
変数を使うには、どのようなデータ型の変数を使うのかを指定する必要がある。ここでデータ型というのは、
「整数」とか「浮動小数点」とか「文字列」と科のようなデータの種類のことである。javaのデータ型には、次のものがある。
・基本データ型 ・参照データ型 ・配列 ・クラス形 ・String型
基本データ型
javaの基本データ型には、次の8種類がある。
・byte ・short ・int ・long ・float ・double ・char ・boolean
これら8種類のデータ型は、次の4つに分類する事ができる。
・整数型・・・・・・・・・・・byte/short/int/long
・浮動小数点形・・・・・float/double
・文字列・・・・・・・・・・ char
・論理型(ブール型)・ boolean
整数型
| 型 | 値 | デフォルト値 | サイズ | 最小値 | 最大値 |
| (ビット) | (範囲) | ||||
| byte | 符号付整数 | 0 | 8 | −128 | 127 |
| short | 符号付整数 | 0 | 16 | −32768 | 32767 |
| int | 符号付整数 | 0 | 32 | −2147483648 | 2147483647 |
| long | 符号付整数 | 0 | 64 | ー9223372036854775808 | 9223372036854775807 |
byte型は、−128〜127の範囲にある整数を扱うことが出来る。
従ってbyte型の変数には,1000といった大きな整数を代入する事は出来ない。
それに対し、同じ整数でもlong型を使えば、−9223372036854775808〜9223372036854775807の範囲にある
大きな整数を扱うことができる。それならば、いつもlong型を使えば良いかというと、そうでもない。
上記の表の「サイズ」欄に注目する。これは、1つのデータがどれくらいの大きさを必要とするかを示している。
例えば、byte型の整数なら1つで8ビットのサイズで済むが、long型の整数は1つで64ビットのサイズを消費することになる。
従って、long型を使えば、それだけメモリの消費量も増えるし、そのデータをディスク上に保存すれば多くのディスクスペースを消費する事になる。
よって、アプリケーションで必要とする桁数とデータサイズの兼ね合いから、適切な整数型を選択する事になる。
浮動小数点型
浮動小数点型は、小数点を扱うことの出来る数値で次の2種類がある。
| 型 | 値 | デフォルト値 | サイズ(ビット) | 範囲 |
| float | 浮動小数点型 | 0.0 | 32 | 約±3.40282347E+38(約6〜7桁の精度) |
| double | 浮動小数点型 | 0.0 | 64 | ±1.79769313486231570E+388(15桁の精度) |
double型の方がfloat型よりも約2倍の精度を持つが、逆に2倍のサイズを必要とする。
float型は約6〜7桁の精度しか扱えないので、通常はdouble型が使われる。
文字型
文字型は、文字通り1文字を表すデータ型で次の1種類がある。
| 型 | 値 | デフォルト値 | サイズ(ビット) | 最小値 | 最大値 |
| char | Unicode文字 | \u0000 | 16 | \u0000 | \uFFFF |
この表中にある\uは、符号なしの16進数を表す。例えば\uFFFFは符号なし16進数のFFFFを表す。
文字型のデータを表すには、その文字を’
’(シングルクォーテーション)で囲む。
また、javaの文字型は16ビットの大きさを持っているので、2バイトから成る漢字を出力する事も出来る。(16ビット=2バイト)
サンプル: Char.java
//
//Char.java---文字型の出力
//
public static Char {
public static void main(String[ ]
args) {
System.out.println('A');
System.out.println('漢');
}
}
実行例
$ Java Char
A
漢
$ _
論理型
論理型は、ブール型とも呼ばれる。論理型は「真」であるか「偽」であるかを表すデータ型で次の1種類(boolean)がある。
| 型 | 値 | デフォルト値 | サイズ(ビット) | 最小値 | 最大値 |
| boolean | true/false | false | 1 | なし | |
boolean型が取る値は、次の2つしかない。
true・・・・・・この値は「真」を表す。
false・・・・・ この値は「偽」を表す。
boolean型は、制御文で真偽の判定をするのに使われる。
次は、論理型のデータを使ったサンプルアプリケーションである。
サンプル: Bool.java
//
//Bool.java---論理型の出力
//
public class Bool {
public static void main(String[ ]
args) {
System.out.println(false);
System.out.println(true);
}
}
実行例
$ java Bool
false
true
$ _
補:論理型の値false、trueをFalse、Trueのように書いてはいけない。
変数
変数は、データを記憶する為のメモリ上の領域である。プログラマーは、必要な変数を確保し、その変数に名前を付けて使うことが出来る。
変数には、具体的な値を代入する事が出来る。例えば、次はxという名前の変数に100という値を代入している。
x=100;
これ以降、変数xを100の代わりに使うことができる。例えば、次のようにすると100が表示される。
System.out.println(x);
変数宣言
変数を使うには、あらかじめ「このような名前の変数を使う」という宣言をする必要がある。これを変数宣言という。変数宣言の書式は
データ型 変数名;
最初にcharとかintとかのように、データ型を指定する。次に変数名を指定し、最後にセミコロンをるける。
例えば、int型のデータを記憶する為のnumという名前の変数を使いたければ、次のように宣言する。
int num;
また、次はcというchar型の変数を宣言している。
char c;
cはchar型なので、文字を代入する事が出来る。
変数名はクラスのつけ方と同じで、javaの命令規則に従ってつける。ただしクラス名は大文字で始めたが、変数名は小文字で始めるのが普通。
同じ型の変数は、まとめて宣言することが出来る。
データ型 変数名1、 変数名2、 変数名3、
例えば次は、xとyとzの3つのint型変数をまとめて宣言している。
int x, y, z;
また、次はgankin、risokuというdouble型の変数をまとめて宣言している。
double gankin, rrisoku;
ローカル変数と宣言の位置
javaで使える変数にはいろいろな種類がある。ローカル変数は、メソッド(あるいは後述されるブロック)の内部だけで使われる変数である。
ローカル変数の宣言は、メソッドあるいはブロック内のどこにでも置くことが出来る。
public static void main(String[ ] args)
{
int num; −−ローカル変数を宣言して
…… −−−それを使う
……
double value; −−ローカル変数を宣言して
…… −−−−−
……
代入
変数にデータを記憶させることを代入という。ローカル変数は、使う前に初期値を代入しておかなければならない。
変数に値を代入するには=という演算子を使って次のようにする。
変数=値;
次に例を示す。
char c;・・・・・・文字型の変数cを宣言し、
c=!A!;・・・・・・・変数cに文字Aを代入する。
int val;・・・・・・整数型の変数valを宣言し、
val=1024;・・・・変数valに整数1024を代入する。
float rate;・・・・浮動小数点型の変数rateを宣言し、
rate=.25・・・・・変数rateに浮動小数点の0.25を代入する。
補:数学で=は、左辺と右辺が等しいことを示すが、javaでは代入を示す。
宣言時に初期値を与える
ローカル変数は、使う前に初期値を代入しておかなけらばならない。という事は、変数宣言をした後、すぐに代入文が続くことになる。
int number;・・・・・変数を宣言して
number=100;・・・・初期値を与える
この変数宣言と代入を1つの文にまとめる事が出来る。書式は
データ型変数名=初期値;
例えば、今の宣言と代入は、次のように1つの文にする事が出来る。
int number=100;・・・・宣言と同時に初期値を与える
複数の変数を同時に宣言するとき、そのうち一部だけを初期化する事も出来る。
例えば、次の例では同時にx、y、zの3つの変数を宣言しているが、それらのうちyだけを初期化している。
残りのx、zについては初期化していないので、これらの変数の初期値は、(明確な代入が行われるまで)不明である。
int x,y=10,z;
参照
変数に値を代入すると、その値の代わりにその変数を使用することが出来る。例えば、次のprintlnは483を出力する。
num=483;
System.out.println(num);
このように変数に代入されている値を使う事をその変数を参照するという。
同じ変数に別の値を代入すると、新しく代入した値がその変数の値になる。次に例を示す。
num=483;・・・・・・・・・・・・・・・・・・・・・numの現在地は483
System.out.println(num);・・・・483が出力される
num=251960;・・・・・・・・・・・・・・・・・・numの新しい値は251960
System.out.println(num);・・・・・・・・・251960が出力される
サンプル:Local.java
//
//Local.java−−−ローカル変数の使い方
//
public class Local {
public static void main(String[ ]
args ) {
int num1, num2;
num1=251960;
num2=483;
System.out.println(num1+num2);
double value=190811.4561;
System.outprintln(value*3);
}
}
実行例
$ java Local
252443
572434.3683
$ _
リテラル
変数に代入される100とか3.14とか”切捨て御免”のような具体的な値をリテラルという。
リテラルの事を定数という言い方をする事もある。しかし、一方で「定数」を値を変更できない変数の意味で使用する事もある。
13とか1234の様に小数点を持たない数値が整数リテラルである。整数には以下の4種類の型があった。
・byte ・short ・int ・long
整数のリテラルは、デフォルトではintになる。
1234・・・・・このリテラルはint型
ただし、それぞれの範囲に収まるような小さい整数ならbyteやshortに代入する事は出来る。
byte b=13;・・・・・13はint型であるが、byte型の範囲−128〜127にあるので、byte型の変数に代入できる。
short s=1234・・ 1234はint型であるが、short型の範囲−32768〜32767にあるので、short型の変数に代入出来る。
intに収まらない大きな整数はlong型になる。
2147483468・・・・この整数は、int型の範囲であるー2147483648〜2147483647を超えているのでlong型
整数の後ろにl(小文字のエル)やLをつけると強制的にlong型になる。
13L・・・・・・long型
1234l・・・・・小文字のエルをつけてもlong型
特殊なリテラルとして、8進数と16進数がある。先頭に0がついた整数は8進数である。
0777・・・・・これは8進数の777である。10進数の777ではない
戦闘に0xまたは0Xがついた整数は、16進数である。
0x12fd・・・ これは16進数の12fd
12.5や0.6847のように小数点のついた数値が浮動小数点リテラルである。浮動小数点には、次の2種類があった。
・float ・double
浮動小数点リテラルは、そのサイズに関わらず、常にdouble型になる。
12.5・・・・・12.5はfloatの範囲にあるがdouble型
浮動小数点リテラルをfloat型にしたい時は最後にfまたはFをつける。
2.56f / 2.56F・・・2.56fも2.56Fもfloat型
次のような変数宣言をすると、コンパイルエラーになる。
float a=12.5;
これは、12.5というdaouble型のリテラルをfloat型の変数に代入しようとしているからである。
次のように最後にfをつければエラーにはならない。
float a=12.5f;
いきなり小数点で始まる浮動小数点リテラルを使うこともできる。
.5・・・・これは0.5を意味するdouble型
逆に小数点で終わる浮動小数点リテラルを使う事もできる。
5.・・・・これは5.0を意味す津fouble型
変数宣言の前にfinalをつけると、その変数は定数になる。
定数は値を1回だけしか設定する事が出来ない。定数は、次のような場面で使われる。
・プログラムの中では変わらない値を表現する。
・値を変更されては困る変数。
コマンドライン因数で半径を入力し、円周・円の面積・球の表面積・球の体積を求めるアプリケーションを作成する。
なお、半径をr、円周率をPIとした時、それぞれの値を求める公式を次に示しておく。
円周=2×PI×r 円の面積=PI×r×r 球の表面積=4×PI×r×r 球の体積=PI×r×r×r×4÷3
サンプル:Circle.java
//
// Circle.java---円周・円の面積・球の表面積・球の体積(1版)
//
public class Circle {
public static void main(String[ ]
args) {
if (args.length < 1) {
System.out.println("使い方:コマンド名半径");
System.exit(1);
}
double r=Double.parseDouble(args[0]); //半径
System.out.println("円周
="+r*2*3.14);
System.out.println("円の面積
="+r*r*3.14);
System.out.println("球の表面積="+r*r*4*3.14);
System.out.println("球の体積
="+r*r*r*3.14*4/3);
}
}
実行例
$ java Circle・・・・・・半径を指定しないで実行
使い方:コマンド名半径
$ java Circle 10.0・・ 半径を指定
円周 =62.800000000000004
円の面積 =314.0
球の表面積=1256.0
球の体積 =4186.666666666667
$ _
先程の書き方だと、円周率3.14が4箇所にわたって登場している。
一般に3.14のようなリテラルを直接プログラムの中に書き込むのは芳しくない。それは、次の理由による。
・そのリテラルが何を意味しているかがわかりづらい。
・変更が面倒。
よって、これから説明する定数を使うと、上記の点を回避する事が出来る。
次は一般的な変数宣言である。宣言と同時に初期値を与えている。
int x=100;
次は、この変数宣言の前にfinalというキーワードを付けたものである。
final int x=100;
このように変数宣言の前にfinalをつけると、xは変数でなく、定数になる。定数は変数と違って、1回しか代入できない。
例えば次のようなことをしようとすると、コンパイルエラーになる。
final double PI・・・定数PIの宣言;
PI=3.14159;・・・・・1回目の代入(これはOK)
PI=3.14;・・・・・・・・2回目の代入(これは×)
例えば、次は円周率を定数として宣言している。
final doubke PI =3.14159;
このように定数に使用する名前は、大文字を使うことが多い。
以下のサンプルは先程の物を、定数を使って書き換えたものを次に示す。
サンプル:Circle_2.java
//
//Circle_2.java---円周・円の面積・球の表面積・球の体積(2版)
//
public class Circle_2 {
public static void main(String[ ]
args) {
final double PI=3.14159;
if (args.length<1) {
System.out.println("使い方:コマンド名半径");
System.exit(1);
}
double r=Double.parseDouble(args[0]); //半径
System.out.println("円周
="+r*2*PI);
System.out.println("円の面積
="+r*r*PI);
System.out.println("球の表面積="+r*r*4*PI);
System.out.println("球の体積
="+r*r*r*PI*4/3);
}
}
実行例
$ java Circle_2 10.0
円周 =62.8318
円の面積 =314.159
球の表面積=1256.636
球の体積 =4188.786666666666
$ _
次へ