Java 中的变量与运算符

JavaBeginner
立即练习

介绍

在本实验中,我们将探索 Java 编程的基本概念:变量和运算符。我们将学习如何声明不同类型的变量,了解几种基本数据类型,并使用各种运算符和表达式进行实践。这种动手实践将为 Java 编程初学者打下坚实的基础。

理解变量与数据类型

变量是编程中用于存储值的命名存储位置。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 中,每个程序必须至少有一个类。

  2. 在类内部,我们有一个 main 方法。这是我们 Java 程序的入口点,执行从这里开始。

  3. 然后我们声明并初始化了不同基本数据类型的变量:

    • byte:用于非常小的整数值(-128 到 127)
    • short:用于较小的整数值(-32,768 到 32,767)
    • int:用于整数值(大约 -20 亿到 20 亿)
    • long:用于非常大的整数值(大约 -9 百亿亿到 9 百亿亿)
    • float:用于单精度浮点数
    • double:用于更高精度的浮点数
    • char:用于单个字符
    • boolean:用于 true/false 值
  4. 注意 long 值的 L 后缀和 float 值的 f 后缀。这些是必要的,用于告诉 Java 这些字面量应分别被视为 longfloat

  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. 我们声明了两个整数变量 ab,并分别赋值为 10 和 3。

  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 / 3 的结果是 3,而不是 3.33333...

此外,观察自增和自减运算符如何影响 c 的值。理解这些运算符对于许多编程任务至关重要,尤其是在处理循环时。

理解位运算符

Java 中的位运算符允许对整数类型的单个位进行操作。这些运算符在日常编程中较少使用,但在某些场景中至关重要,例如处理二进制数据或优化某些算法。

在 WebIDE 中,创建一个名为 BitwiseDemo.java 的新文件。复制并粘贴以下代码:

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

        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)); // Left Shift
        System.out.println("a >> 2 = " + (a >> 2)); // Right Shift
    }
}

让我们分解这些位运算操作:

  1. AND (&):如果两个位都为 1,则返回 1,否则返回 0。

    • 60 & 13 = 0011 1100 & 0000 1101 = 0000 1100(十进制中的 12)
  2. OR (|):如果至少有一个位为 1,则返回 1,否则返回 0。

    • 60 | 13 = 0011 1100 | 0000 1101 = 0011 1101(十进制中的 61)
  3. XOR (^):如果位不同,则返回 1;如果位相同,则返回 0。

    • 60 ^ 13 = 0011 1100 ^ 0000 1101 = 0011 0001(十进制中的 49)
  4. NOT (~):反转所有位。

    • ~60 = ~0011 1100 = 1100 0011(十进制中的 -61,由于二进制补码表示)
  5. 左移 (<<):将所有位向左移动指定的位数。

    • 60 << 2 = 0011 1100 << 2 = 1111 0000(十进制中的 240)
  6. 右移 (>>):将所有位向右移动指定的位数。

    • 60 >> 2 = 0011 1100 >> 2 = 0000 1111(十进制中的 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 (||):如果至少有一个操作数为 true,则返回 true,否则返回 false

    • true || false = true
  3. NOT (!):反转布尔值。

    • !true = false
  4. 短路求值:在表达式 x < 0 && y++ > 5 中,Java 首先评估 x < 0。由于结果为 false,它不会继续评估第二部分(y++ > 5),因为无论第二部分的结果如何,整体结果都必须是 false。这就是为什么在评估后 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("Arithmetic Operations:");
        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("\nBitwise Operations:");
        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("\nLogical Operations:");
        System.out.println("x && y = " + (x && y));
        System.out.println("x || y = " + (x || y));
        System.out.println("!x = " + (!x));

        // 组合运算
        System.out.println("\nCombined Operations:");
        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 执行位与、位或、位异或和位非操作。
    • 这些操作展示了位运算符如何对整数的二进制表示进行操作。
  3. 逻辑运算:

    • 我们基于 ab 的比较创建了两个布尔变量 xy
    • 然后我们展示了逻辑与、逻辑或和逻辑非操作。
  4. 组合运算:

    • 我们展示了如何将不同类型的运算符组合成更复杂的表达式。
    • (a + b) * 2 展示了如何使用括号来控制运算顺序。
    • (a > b) && (a % b == 0) 结合了比较、取模运算和逻辑与操作。

在 WebIDE 中运行此程序。你应该会看到类似以下的输出:

Arithmetic Operations:
a + b = 15
a - b = 5
a * b = 50
a / b = 2
a % b = 0

Bitwise Operations:
a & b = 0
a | b = 15
a ^ b = 15
~a = -11

Logical Operations:
x && y = false
x || y = true
!x = false

Combined Operations:
(a + b) * 2 = 30
(a > b) && (a % b == 0) = true

此输出展示了每种运算符的工作原理:

  • 算术运算产生了预期的数学结果。
  • 位运算展示了操作 ab 的二进制表示的结果。
  • 逻辑运算展示了如何组合布尔值。
  • 组合运算展示了如何使用多种类型的运算符创建更复杂的表达式。

理解如何组合这些运算符对于编写更复杂和高效的 Java 程序至关重要。随着你在 Java 学习中的深入,你会发现自己在解决日益复杂的问题时会使用这些运算符的各种组合。

总结

在本实验中,我们探索了 Java 编程的基本概念:变量和运算符。我们学习了如何声明和使用不同类型的变量,包括基本数据类型,如 intbooleanchar。然后,我们深入研究了 Java 中的各种运算符:

  1. 用于基本数学计算的算术运算符
  2. 用于操作整数类型中单个位的位运算符
  3. 用于处理布尔值的逻辑运算符

通过实际示例,我们了解了如何单独或组合使用这些运算符来执行各种操作。我们创建了一个简单的计算器程序,展示了在单个应用程序中使用多种类型运算符的方式。