ほぷしぃ

Java言語入門 〜C言語を学んだ君へ〜

[第4回]変数と演算と配列と

[1] エスケープ文字

C言語にエスケープシーケンスというものがありました。
Javaにも同じような機能を持つ特殊記号があります。
Javaではエスケープ文字と言います。
以下にエスケープ文字の一覧を表示します。

エスケープ文字一覧

文字機能
\bバックスペース
\f改ページ
\n改行
\r復帰
\t水平タブ
\\\
\''
\""

では実際にプログラムを見てみましょう。

エスケープ文字を使ったプログラム

public class Java04_05{
    public static void main(String args[]){
        System.out.println("タブ\t aa ");
        System.out.println("ダブルコーテーションを表示:\" ");
        System.out.println("シングルコーテーションを表示:\' ");
        System.out.println("\\自身を表示:\\");
    }
}

実行結果

実行結果
ただ表示しただけのプログラムです。C言語でも同様に扱いました。

[2] 演算子

計算、条件を指定等に演算子というものをC言語で使いました。
JavaにもC言語と同じように、演算子があります。
使い方はC言語と同じなので特に説明は行いません。
また、演算子の優先順位もC言語と同じです。
以下に各演算子についてまとめておきます。

算術演算子

算術演算子とは足し算、引き算、掛け算、割り算等のことです。
演算子機能
+足し算A = B + C
-引き算A = B - C
*掛け算A = B * C
/割り算A = B / C
%あまりA = B % C

インクリメントとデクリメントももちろん使うことができます。

関係演算子

関係演算子とは2つの値の大小を比較する演算子です。
演算子機能
<小さい
<=以下
>大きい
>=以上

等価演算子

同じかどうか比較する演算子を等価演算子といいます。
演算子機能
==等しい
!=等しくない

論理演算子

複数の条件を指定する場合に使う演算子を論理演算子といいます。
演算子機能
!否定
&&かつ(論理積)
||または(論理和)

複合代入演算子

演算子使用例同じ処理
+=A += BA = A + B
-=A -= BA = A - B
*=A *= BA = A * B
/=A /= BA = A / B
%=A %= BA = A % B

その他演算子

演算子機能
~ビットの反転
&ビットごとの論理積(AND)
|ビットごとの論理和(OR)
^ビットごとの排他的論理和(XOR)
<<左シフト
>>右シフト
>>>論理右シフト
?:条件演算子
instanceofオブジェクト、配列の型の比較
newオブジェクト生成

見慣れないinstanceofとnewがあります。これはここでは説明せずに後に回すことにします。
instanceofは第10回「インタフェース」、newは第8回「クラス」で説明します。
詳細については、そちらを見てください。
では、演算子を使ったプログラムを見ていきましょう。

演算子のプログラム

public class Java04_06{
    public static void main(String args[]){
        int value1 = 10;
        int value2 = 20;
        System.out.println("2つの合計値"+ value1 + value2);
        System.out.println("2つの合計値"+ (value1 + value2) );
    }
}

実行結果

実行結果

1つ目のSystem.out.println1では予想通りの結果を得ることができません。
前のページで"+"はくっつける役割があると説明しました。
このときの"+"は文字連結演算子と呼ばれています。
プログラムはこれを以下のように処理しているのです。

1.  2つの合計値 + value1 + value2
2.  2つの合計値10 + value2
3.  2つの合計値1020

value1までは特に問題ないのですが、value1も同じ優先順位の"+"だと判断されて1020になってしまいます。
もし2つの値を合計して表示したい場合には()で優先順位を変える必要があります。

1.  2つの合計値 + (value1 + value2)
2.  2つの合計値 + 30
3.  2つの合計値30

2つ目のSystem.out.println();はまさに求めている結果が表示されています。
このような部分で計算するときには()をつけておくと後で見るときに便利だと思います。

[3] キャスト(変換)

C言語でキャストは学びました。Javaでもキャストがあります。
キャストについて復習を兼ねて説明を入れておきます。
異なるデータ型での処理の際に表現できない情報を代入するとエラーが起きます。
そこで、適切なデータ型に入れるために型変換(キャスト)をします。
小さい型から大きい型への代入は型変換を自動的に行ってくれます。

自動的にキャストしてくれる例

int vaule1 = 10;
double vaule2;
vaule2 = vaule1;

逆に大きい型から小さい型への代入は型変換を行えません。

自動的にキャストしない例

double value1 = 1.414;
int value2 = value1; // ここでエラーが起きます

この例はdouble型からint型へ代入を行っていますが、intよりdouble型のほうが大きいため、型変換が自動的には行われません。
これは、変換によって、1.414という数字のうち0.414がintでは扱えないために発生する現象です。
それでも、代入したい型に合わせて変換する必要があった場合にはこのようにします。

意図的にキャストする例

double value1 = 1.414;
int value2 = (int)value1; // 適切に型変換するとエラーは起きません

なお、今回はデータ型のキャストを行いましたが、オブジェクトにもキャストはあります。
それについては、第9回「継承」で説明します。

次に、ここまで学んできたことについて練習問題を解いて復習しましょう。



前のページへ ページのトップへ 第1問-問題へ