Java の変数と演算子

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java プログラミングの基本概念である変数と演算子を学びます。さまざまな種類の変数を宣言する方法、いくつかのプリミティブデータ型を理解し、さまざまな演算子と式を使ってみます。この実践的な経験は、Java プログラミングの初心者にとって堅牢な基礎を提供します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java/BasicSyntaxGroup -.-> java/identifier("Identifier") java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/BasicSyntaxGroup -.-> java/operators("Operators") java/BasicSyntaxGroup -.-> java/booleans("Booleans") java/BasicSyntaxGroup -.-> java/variables("Variables") java/BasicSyntaxGroup -.-> java/output("Output") java/StringManipulationGroup -.-> java/strings("Strings") subgraph Lab Skills java/identifier -.-> lab-178553{{"Java の変数と演算子"}} java/data_types -.-> lab-178553{{"Java の変数と演算子"}} java/operators -.-> lab-178553{{"Java の変数と演算子"}} java/booleans -.-> lab-178553{{"Java の変数と演算子"}} java/variables -.-> lab-178553{{"Java の変数と演算子"}} java/output -.-> lab-178553{{"Java の変数と演算子"}} java/strings -.-> lab-178553{{"Java の変数と演算子"}} end

変数とデータ型の理解

変数は、プログラミングにおいて値を保持する名前付きの格納場所です。Java はいくつかのプリミティブデータ型を提供しており、それぞれ特定の種類の値を格納するように設計されています。これらの概念を実際の例を通じて調べてみましょう。

まず、変数の宣言と使用を示す Java ファイルを作成します。WebIDE(VS Code に似ています)で、VariableDemo.java という名前の新しいファイルを作成します。これは、ファイルエクスプローラーペインで右クリックし、「新しいファイル」を選択して、ファイル名を入力することで行えます。

次のコードをファイルにコピーして貼り付けます。

public class VariableDemo {
    public static void main(String[] args) {
        // さまざまな型の変数を宣言して初期化する
        byte smallNumber = 127;
        short mediumNumber = 32000;
        int largeNumber = 2000000000;
        long veryLargeNumber = 9000000000000000000L;
        float decimalNumber = 3.14f;
        double preciseDecimal = 3.14159265359;
        char singleCharacter = 'A';
        boolean isJavaFun = true;

        // 値を出力する
        System.out.println("byte: " + smallNumber);
        System.out.println("short: " + mediumNumber);
        System.out.println("int: " + largeNumber);
        System.out.println("long: " + veryLargeNumber);
        System.out.println("float: " + decimalNumber);
        System.out.println("double: " + preciseDecimal);
        System.out.println("char: " + singleCharacter);
        System.out.println("boolean: " + isJavaFun);
    }
}

このコードを理解するために分解してみましょう。

  1. まず、VariableDemo という名前のクラスを宣言します。Java では、すべてのプログラムには少なくとも 1 つのクラスが必要です。

  2. クラスの中には、main メソッドがあります。これは Java プログラムのエントリポイントであり、実行が始まる場所です。

  3. 次に、さまざまなプリミティブデータ型の変数を宣言して初期化します。

    • byte:非常に小さな整数値(-128 から 127)に使用
    • short:小さな整数値(-32,768 から 32,767)に使用
    • int:整数値(約 -20 億から 20 億)に使用
    • long:非常に大きな整数値(約 -9 京から 9 京)に使用
    • float:少数(単精度)に使用
    • double:より高精度の少数に使用
    • char:1 文字の文字に使用
    • boolean:真偽値に使用
  4. long 値には L 接尾辞があり、float 値には f 接尾辞があることに注意してください。これらは、それぞれこれらのリテラルが longfloat として扱われるべきであることを Java に知らせるために必要です。

  5. 最後に、System.out.println() を使って各変数を出力します。ここでの + 演算子は、文字列を連結するために使用され、説明用の文字列を変数の値と結合します。

さて、このプログラムを実行してみましょう。WebIDE で、ターミナルペインを開き、次のコマンドを実行します。

javac VariableDemo.java
java VariableDemo

コンソールペインには次のような出力が表示されるはずです。

byte: 127
short: 32000
int: 2000000000
long: 9000000000000000000
float: 3.14
double: 3.14159265359
char: A
boolean: true

この出力は、宣言して初期化した各変数の値を示しています。コードで割り当てた値と一致することを確認するために少し時間をかけてください。

算術演算子の使い方

Java の算術演算子を使って数学的な計算を行うことができます。これらの演算子を示す新しいファイルを作成しましょう。

WebIDE で、ArithmeticDemo.java という名前の新しいファイルを作成します。次のコードをコピーして貼り付けます。

public class ArithmeticDemo {
    public static void main(String[] args) {
        int a = 10;
        int b = 3;

        System.out.println("Addition: " + (a + b));
        System.out.println("Subtraction: " + (a - b));
        System.out.println("Multiplication: " + (a * b));
        System.out.println("Division: " + (a / b));
        System.out.println("Modulus: " + (a % b));

        // インクリメントとデクリメント
        int c = 5;
        System.out.println("c before increment: " + c);
        System.out.println("c after increment: " + (++c));
        System.out.println("c after decrement: " + (--c));
    }
}

このコードを分解してみましょう。

  1. 2 つの整数型変数 ab を宣言し、それぞれ 10 と 3 の値を割り当てます。

  2. 次に、さまざまな算術演算を行います。

    • 加算 (+):2 つの数値を加算します
    • 減算 (-):左オペランドから右オペランドを引きます
    • 乗算 (*):2 つの数値を乗算します
    • 除算 (/):左オペランドを右オペランドで割ります
    • 剰余 (%):左オペランドを右オペランドで割ったときの余りを返します
  3. インクリメント (++) とデクリメント (--) 演算子も示しています。

    • ++c は、式で使用される前に c の値を 1 増やします
    • --c は、式で使用される前に c の値を 1 減らします

WebIDE でこのプログラムを実行します。次のような出力が表示されるはずです。

Addition: 13
Subtraction: 7
Multiplication: 30
Division: 3
Modulus: 1
c before increment: 5
c after increment: 6
c after decrement: 5

整数同士を除算する場合 (a / b)、Java は整数除算を行い、小数部分を切り捨てます。これが 10 / 33 となり、3.33333... ではない理由です。

また、インクリメントとデクリメント演算子が c の値にどのように影響するかを観察してください。これらの演算子を理解することは、多くのプログラミングタスク、特にループを使った場合にとても重要です。

ビット演算子の理解

Java のビット演算子を使うと、整数型の個々のビットを操作できます。これらの演算子は日常のプログラミングではあまり使われませんが、バイナリデータを扱ったり、特定のアルゴリズムを最適化するなど、特定のシナリオでは不可欠です。

WebIDE で、BitwiseDemo.java という名前の新しいファイルを作成します。次のコードをコピーして貼り付けます。

public class BitwiseDemo {
    public static void main(String[] args) {
        int a = 60;  // 60 = 0011 1100 2進数で
        int b = 13;  // 13 = 0000 1101 2進数で

        System.out.println("a & b = " + (a & b));   // AND
        System.out.println("a | b = " + (a | b));   // OR
        System.out.println("a ^ b = " + (a ^ b));   // XOR
        System.out.println("~a = " + (~a));         // NOT
        System.out.println("a << 2 = " + (a << 2)); // 左シフト
        System.out.println("a >> 2 = " + (a >> 2)); // 右シフト
    }
}

これらのビット演算を分解してみましょう。

  1. AND (&):両方のビットが 1 の場合に 1 を返し、それ以外の場合は 0 を返します。

    • 60 & 13 = 0011 1100 & 0000 1101 = 0000 1100 (10 進数で 12)
  2. OR (|):少なくとも 1 つのビットが 1 の場合に 1 を返し、それ以外の場合は 0 を返します。

    • 60 | 13 = 0011 1100 | 0000 1101 = 0011 1101 (10 進数で 61)
  3. XOR (^):ビットが異なる場合に 1 を返し、同じ場合に 0 を返します。

    • 60 ^ 13 = 0011 1100 ^ 0000 1101 = 0011 0001 (10 進数で 49)
  4. NOT (~):すべてのビットを反転させます。

    • ~60 = ~0011 1100 = 1100 0011 (2 的補数表現により、10 進数で -61)
  5. 左シフト (<<):すべてのビットを指定された数のポジションだけ左にシフトします。

    • 60 << 2 = 0011 1100 << 2 = 1111 0000 (10 進数で 240)
  6. 右シフト (>>):すべてのビットを指定された数のポジションだけ右にシフトします。

    • 60 >> 2 = 0011 1100 >> 2 = 0000 1111 (10 進数で 15)

WebIDE でこのプログラムを実行します。次のような出力が表示されるはずです。

a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15

最初はビット演算子を理解するのが難しいかもしれませんが、特定の種類の操作には非常に強力で、特に低レベルのプログラミングやパフォーマンスを最適化するコードを作成する際に役立ちます。

論理演算子の探究

Java の論理演算子は、ブール値に対して論理演算を行うために使用されます。これらの演算子は、プログラム内で複雑な条件を作成する際に欠かせないものです。

WebIDE で、LogicalDemo.java という名前の新しいファイルを作成します。次のコードをコピーして貼り付けます。

public class LogicalDemo {
    public static void main(String[] args) {
        boolean a = true;
        boolean b = false;

        System.out.println("a && b = " + (a && b)); // 論理 AND
        System.out.println("a || b = " + (a || b)); // 論理 OR
        System.out.println("!a = " + (!a));         // 論理 NOT

        // ショートサーキット評価
        int x = 5;
        int y = 10;
        System.out.println("x < 0 && y++ > 5 = " + (x < 0 && y++ > 5));
        System.out.println("y after evaluation: " + y);
    }
}

これらの論理演算を分解してみましょう。

  1. AND (&&):両方のオペランドが true の場合に true を返し、それ以外の場合は false を返します。

    • true && false = false
  2. OR (||):少なくとも 1 つのオペランドが true の場合に true を返し、それ以外の場合は false を返します。

    • true || false = true
  3. NOT (!):ブール値を反転させます。

    • !true = false
  4. ショートサーキット評価:式 x < 0 && y++ > 5 では、Java はまず x < 0 を評価します。これは false なので、全体の結果が false である限り、2 番目の部分 (y++ > 5) を評価する必要はありません。これが評価後の y が 10 のままである理由です。

WebIDE でこのプログラムを実行します。次のような出力が表示されるはずです。

a && b = false
a || b = true
!a = false
x < 0 && y++ > 5 = false
y after evaluation: 10

論理演算子を理解することは、if 文や while ループなど、プログラム内で条件を作成する際に非常に重要です。&&|| のショートサーキット動作は、特定の状況でコードを最適化するためにも使用できます。

まとめてみる

これまで様々な種類の演算子を調べてきましたので、複数の種類の演算子を使う単純な計算機プログラムを作成しましょう。これにより、学んだことを強化し、これらの概念が実際のシナリオでどのように適用できるかを示すことができます。

WebIDE で、SimpleCalculator.java という名前の新しいファイルを作成します。次のコードをコピーして貼り付けます。

public class SimpleCalculator {
    public static void main(String[] args) {
        int a = 10;
        int b = 5;

        // 算術演算
        System.out.println("算術演算:");
        System.out.println("a + b = " + (a + b));
        System.out.println("a - b = " + (a - b));
        System.out.println("a * b = " + (a * b));
        System.out.println("a / b = " + (a / b));
        System.out.println("a % b = " + (a % b));

        // ビット演算
        System.out.println("\nビット演算:");
        System.out.println("a & b = " + (a & b));
        System.out.println("a | b = " + (a | b));
        System.out.println("a ^ b = " + (a ^ b));
        System.out.println("~a = " + (~a));

        // 論理演算
        boolean x = a > b;
        boolean y = a < b;
        System.out.println("\n論理演算:");
        System.out.println("x && y = " + (x && y));
        System.out.println("x || y = " + (x || y));
        System.out.println("!x = " + (!x));

        // 演算の組み合わせ
        System.out.println("\n組み合わせた演算:");
        System.out.println("(a + b) * 2 = " + ((a + b) * 2));
        System.out.println("(a > b) && (a % b == 0) = " + ((a > b) && (a % b == 0)));
    }
}

このコードを分解して各部分を説明しましょう。

  1. 算術演算:

    • ab に対して基本的な算術演算(加算、減算、乗算、除算、剰余)を行います。
    • これらの演算は、先に学んだ算術演算子の使い方を示しています。
  2. ビット演算:

    • ab に対してビット AND、OR、XOR、NOT 演算を行います。
    • これらの演算は、整数の 2 進数表現に対してビット演算子がどのように機能するかを示しています。
  3. 論理演算:

    • ab の比較に基づいて、2 つのブール型変数 xy を作成します。
    • 次に、これらのブール値に対して論理 AND、OR、NOT 演算を示します。
  4. 組み合わせた演算:

    • 異なる種類の演算子をより複雑な式でどのように組み合わせるかを示します。
    • (a + b) * 2 は、演算の順序を制御するための括弧の使い方を示しています。
    • (a > b) && (a % b == 0) は、比較、剰余演算、論理 AND を組み合わせています。

WebIDE でこのプログラムを実行します。次のような出力が表示されるはずです。

算術演算:
a + b = 15
a - b = 5
a * b = 50
a / b = 2
a % b = 0

ビット演算:
a & b = 0
a | b = 15
a ^ b = 15
~a = -11

論理演算:
x && y = false
x || y = true
!x = false

組み合わせた演算:
(a + b) * 2 = 30
(a > b) && (a % b == 0) = true

この出力は、各種類の演算子がどのように機能するかを示しています。

  • 算術演算は期待される数学的結果を生成します。
  • ビット演算は ab の 2 進数表現を操作した結果を示します。
  • 論理演算はブール値をどのように組み合わせるかを示します。
  • 組み合わせた演算は、複数の種類の演算子を使ってより複雑な式を作成できることを示します。

これらの演算子をどのように組み合わせるかを理解することは、より複雑で効率的な Java プログラムを書くために不可欠です。Java の学習を進めるにつれて、これらの演算子を様々な組み合わせで使ってますます複雑な問題を解決するようになります。

まとめ

この実験では、Java プログラミングの基本概念である変数と演算子を探究しました。intbooleanchar などの基本データ型を含む、さまざまな種類の変数を宣言して使用する方法を学びました。次に、Java のさまざまな演算子について掘り下げました。

  1. 基本的な数学的計算に使用する算術演算子
  2. 整数型の個々のビットを操作するビット演算子
  3. ブール値を扱う論理演算子

実際の例を通じて、これらの演算子が個別に、または組み合わせて使用されて幅広い操作を行う方法を見ました。単一のアプリケーションで複数の種類の演算子の使用を示す単純な計算機プログラムを作成しました。