[PR] 迷惑メール トップページプロ3ゼミJavaJava入門講座一学期単位2 →3時間目

3時間目 型と式・演算子

2−3−1.型

 変数について学んできましたが、変数はメモリを記憶するための別名と教えましたね。
記憶するのに、なんでもかんでもすべてを記憶できるようにしたら効率が悪いと思いませんか。

例えば何かを学ぼうとして、全範囲の参考書を選ぶよりもその事だけが詳しく載っている参考書の方が安く 済みますし、ページ数も少なくて無駄が無いです。
Javaのメモリを扱うのも同じで、使える範囲を指定した方がメモリ効率もよく、プログラマもこの変数は何に 使うかが明確になります。

 使える範囲を明確にしたのが、型です。
型を指定することにより、プログラムで扱える範囲を決定します。
型には、多く分けて基本データ型と参照型があります。

2−3−2.基本のデータは、基本データ型

 普段私たちが、使っている「0」、「1.1」または「b」などは、基本的な1つのデータで成り立っています。
基本的な1つのデータの範囲を基本データ型と呼びます。
すでに登場している「int」などが基本データ型で使える範囲を表しています。
「int」は、integerの略で整数というデータ型で、「int」を指定すれば、整数が使えるようになりますが、 詳細は後ほど説明します。
また、「int」などをデータ型で区別して、int型のように表します。

 Javaで扱える基本データ型はint型以外にも以下の表があります。

基本データ型(プログラミング規則)
データ型サイズ表現できる値
整数byte8ビット-128 〜 127
short16ビット-32,768 〜 32,767
int32ビット-2,147,483,648 〜 2,147,483,647
long64ビット-9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807
浮動小数float32ビット32ビット単精度浮動小数点数
double64ビット64ビット倍精度浮動小数点数
文字char16ビット\u0000 〜 \uffff(Unicode)
真偽値boolean-true又はfalse

 補足として、浮動小数のfloatは、±1.40239846×10-45 〜 ±3.40282347×1038までの値が範囲。
浮動小数のdoubleは、±4.9406545841246544×10-324 〜 ±1.79769313486231570×10308までの値が範囲。

 次に、基本データ型を扱ったサンプルのSample2_3_1を見てください!

Sample2_3_1.java
public class Sample2_3_1 {
    public static void main(String[] args) {
        new DataType().view();
    }
}

class DataType {
    void view() {
        byte    b = 100;
        short   s = 150;
        int     i = 200;
        long    l = 2147483648L;            // long型を使う場合、intのサイズを超える場合は後尾にLを付ける
        float   f = 0.35F;                  // float型の変数に値を入れる場合は、常に後尾にFを付ける
        double  d = 10.05;                  // double型の場合は、何も付けなくていい。
        char    c = 'A';
        boolean bl = true;
        
        System.out.println("byte    = " + b);
        System.out.println("short   = " + s);
        System.out.println("int     = " + i);
        System.out.println("long    = " + l);
        System.out.println("float   = " + f);
        System.out.println("double  = " + d);
        System.out.println("char    = " + c);
        System.out.println("boolean = " + bl);
    }
}
byte    = 100
short   = 150
int     = 200
long    = 2147483648
float   = 0.35
double  = 10.05
char    = A
boolean = true

 それぞれに、データがちゃんと代入されて、表示できますね。

2−3−3.基本データを組み合わせたのが参照型

 「Sample2_3_1.java」では、基本データ型の例を示しましたが、どこにも文字列を扱う型が存在しないこと に気づきましたか、文字列を扱うには、「String」クラスという型を使います。
「String」クラスのようにクラスで表せる型を参照型と呼び、基本データの組み合わせからできています。
例えば、String型は、文字を扱う基本データ型のchar型の要素を持っています。
実際には、基本データ型を組み合わせただけの単純な作りではありませんが、詳しい説明は、 「二学期 Javaの特徴を知ろう」に譲ることにしてString型を少し見てみましょう。

次は、String型を使用したサンプルプログラムです。
Sample2_3_2.java
public class Sample2_3_2 {
    public static void main(String[] args) {
        new SampleString().view();
    }
}

class SampleString {
    void view() {
        String  str = "サンプル文字列";
        
        System.out.println("文字列を表示 = " + str);
        System.out.println("文字列の長さ = " + str.length());
    }
}
文字列を表示 = サンプル文字列
文字列の長さ = 7

 「Sample2_3_2.java」を見てみると、基本データ型とは違い「str.length()」のような 使われ方をしています。
String型は、クラスなので「new SampleString().view()」ように、メソッドが使えます。
まずは、単純に文字列を扱うには、String型と覚えておきましょう。

 いろいろな型を見てきましたが、宣言した変数は宣言した型の値だけ記憶することができます。
よって、それ以外の値を代入した場合は、コンパイルエラーになります(プログラミング規則)。

2−3−4.式と演算子

 プログラム作成する目標の中でも高い目標は、計算ですよね(画像も映像も計算を行いますからね)。
ただ、値を表示するだけや値を記憶するだけでは、紙でも十分でしょう。
演算子は、「a + b」などのように式が出てくる「+」などですが、Javaには算数や数学以外で使う以外の演算 子も扱えます。
Javaが使える算術演算子は以下の通りです(プログラミング規則)。

2項算術演算子   単項算術演算子
+ 2項+演算子 加算 + 単項+演算子 プラス
- 2項-演算子 減算 - 単項-演算子 マイナス
* 2項*演算子 乗算
/ 2項/演算子 除算
% 2項%演算子 剰余算

算術演算子とは、「+」のことですよね。
でも表を見ると「%」って何?って思われるかもしれません(中学や高校の数学では習っていませんからわから なくても当然ですよ(笑))、それと剰余算って何と思った方もいるでしょう(忘れている方は次で復習しましょ う、本Webはなんと数学の復習も同時に行えてしまうのです(笑))。
「%」は、余りを求める演算子で、例えば、「10 % 3 = 1」の式があるとします。
「10 % 3」の余りは「1」になり、整数まで求めて、その余りが答えになることから「1.11...」にはならないの で注意しましょう。
よって、2項%演算子で求めた答えは常に整数になります。

 算術演算子を使ったサンプルプログラム「Sample2_3_3.java」を見てください!

Sample2_3_3.java
public class Sample2_3_3 {
    public static void main(String[] args) {
        new Arithmetic().view();
    }
}

class Arithmetic {
    void view() {
        int     arit1, arit2, arit3, arit4, arit5, arit6, arit7, arit8;
        
        arit1 = 5 + 2;                      // 2項+演算子
        arit2 = 10 - 8;                     // 2項-演算子
        arit3 = 5 * 3;                      // 2項*演算子
        arit4 = 21 / 3;                     // 2項/演算子
        arit5 = 20 % 3;                     // 2項%演算子
        arit6 = 20 / 3;                     // 小数は切り捨てられる(int型の範囲で記憶する)
        
        arit7 = +10;                        // 単項+演算子
        arit8 = -10;                        // 単項-演算子
        
        System.out.println("5 + 2  = " + arit1);
        System.out.println("10 - 8 = " + arit2);
        System.out.println("5 * 3  = " + arit3);
        System.out.println("21 / 3 = " + arit4);
        System.out.println("20 % 3 = " + arit5);
        System.out.println("20 / 3 = " + arit6);
        System.out.println("+10    = " + arit7);
        System.out.println("-10    = " + arit8);
    }
}
5 + 2  = 7
10 - 8 = 2
5 * 3  = 15
21 / 3 = 7
20 % 3 = 2
20 / 3 = 6
+10    = 10
-10    = -10

 計算する時に、「10 + 20 * 30 / 5」のように、定数だけを並べていては、一部分だけ違い他は同じ場合に は不便です。
 変数をせっかく習ったのですから変数を使って、記憶した値を式の中で使えれば便利でしょう。
数学の公式でもそうしているはずです。
例えば、「hoge = piyo + 10」のような計算です。

 Javaでは、次のような計算もできます。
「hoge = hoge + 10」
本来の数学で理解すると、「hoge + 10」は「hoge」と等しいと理解できるはずですが、Javaの場合は違います。

 Javaは、「=」の事を代入演算子と呼び演算子の一種として扱います。
演算子には、順位がある事を知っていますよね。
「*,/」は、「+,-」よりも先に計算され「」の中は同順位、どちらから計算しても結果は変わらないという事で す。
代入演算子は、「*,/,+,-」よりも順が低い為、「=」の左から計算が実行されます。
先ほどの「hoge = hoge + 10」は、「hoge + 10」が計算された後、その結果が「hoge」に代入されます。

 計算の優先順位(単位2 4時間目 代入演算子及びインクリメント・デクリメント演 算子に詳しく書きました)の話が出てきましたが、Javaには他にも数学と異なる事があります。
それは、単位2 2時間目 変数にも出てきたカンマ演算子もそうですし、 「(),{},[]」もそうです。
Javaでは、「()、{},[]」を独特な使い方をします。
ここでは、「()」を説明します(残りは後述を参考)。
「{(10 + 20) * 5 + 2} / 2」の式の答えは、「76」です。
Javaでは、「((10 + 20) * 5 + 2) / 2」の書き方になります。
全て「()」で優先順位を変えることによって、答えが「76」です。
ちなみに、前者の式だとJavaはコンパイルエラーになります。
※Javaでは、式の優先順位を変える場合に「()」だけを使う(プログラミング規則)。


2時間目 変数に戻る     4時間目 代入演算子及びインクリメント・デクリメント演算子に進む

単位2 ソースの基本に戻る

トップページに戻る