2 运算符和赋值
2.1 掌握运算符
在Java中,运算符是用来执行各种操作的特殊符号。运算符用于在表达式中执行算术、关系、逻辑等操作。以下是Java中常见的运算符:
1. 算术运算符:
java
int a = 5, b = 2;
int sum = a + b; // 加法
int difference = a - b; // 减法
int product = a * b; // 乘法
int quotient = a / b; // 除法
int remainder = a % b; // 求余
2. 关系运算符:
java
int x = 5, y = 8;
boolean isEqual = (x == y); // 等于
boolean notEqual = (x != y); // 不等于
boolean greaterThan = (x > y); // 大于
boolean lessThan = (x < y); // 小于
boolean greaterOrEqual = (x >= y); // 大于等于
boolean lessOrEqual = (x <= y); // 小于等于
3. 逻辑运算符:
java
boolean p = true, q = false;
boolean andResult = p && q; // 与
boolean orResult = p || q; // 或
boolean notResult = !p; // 非
4. 赋值运算符:
java
int a = 5;
a += 3; // 等效于 a = a + 3;
5. 自增和自减运算符:
java
int x = 5;
x++; // 自增,等效于 x = x + 1;
x--; // 自减,等效于 x = x - 1;
6. 位运算符:
java
int a = 5, b = 3;
int andResult = a & b; // 按位与
int orResult = a | b; // 按位或
int xorResult = a ^ b; // 按位异或
int leftShiftResult = a << 1; // 左移一位
int rightShiftResult = a >> 1; // 右移一位
7. 三元运算符:
java
int x = 5, y = 8;
int result = (x > y) ? x : y; // 如果 x 大于 y,则结果为 x,否则结果为 y
2.2 在包含运算符的表达式中,确定操作数的值、并确定表达式的值是什么(包括值和类型)
在Java中,表达式的值和类型是由运算符和操作数的值以及类型共同决定的。不同类型的操作数在表达式中的组合可能导致类型转换和规则的应用。以下是一些常见的运算符和它们在表达式中的行为:
1. 算术运算符:
java
int a = 5, b = 2;
int sum = a + b; // 7,整数相加
int difference = a - b; // 3,整数相减
int product = a * b; // 10,整数相乘
int quotient = a / b; // 2,整数相除,结果为整数
int remainder = a % b; // 1,取余
2. 关系运算符:
java
int x = 5, y = 8;
boolean isEqual = (x == y); // false,判断是否相等
boolean notEqual = (x != y); // true,判断是否不相等
boolean greaterThan = (x > y); // false,判断是否大于
boolean lessThan = (x < y); // true,判断是否小于
boolean greaterOrEqual = (x >= y); // false,判断是否大于等于
boolean lessOrEqual = (x <= y); // true,判断是否小于等于
3. 逻辑运算符:
java
boolean p = true, q = false;
boolean andResult = p && q; // false,逻辑与
boolean orResult = p || q; // true,逻辑或
boolean notResult = !p; // false,逻辑非
4. 赋值运算符:
java
int a = 5;
a += 3; // 8,相当于 a = a + 3;
5. 自增和自减运算符:
java
int x = 5;
x++; // 6,自增
x--; // 5,自减
6. 字符串连接:
java
String str1 = "Hello";
String str2 = " World";
String result = str1 + str2; // "Hello World",字符串连接
7. 类型转换:
在表达式中,如果操作数的类型不同,Java会进行类型转换。有两种类型转换:
- 隐式类型转换: 小范围类型自动转换为大范围类型,例如,整数转换为浮点数。
java
int intValue = 42;
double doubleValue = intValue; // 隐式类型转换,int转换为double
- 显式类型转换: 大范围类型转换为小范围类型,需要使用强制类型转换。
java
double doubleValue = 3.14;
int intValue = (int) doubleValue; // 显式类型转换,double转换为int
2.3 掌握函数参数的传递方式
在Java中,函数参数的传递方式有两种:值传递和引用传递。理解这两种传递方式对于编写Java程序是很重要的。
1. 值传递(Pass by Value):
在值传递中,实际参数(调用函数时传递的参数)的值被复制给形式参数(函数定义中声明的参数)。这意味着函数内对形式参数的修改不会影响实际参数的值。
java
public class PassByValueExample {
public static void main(String[] args) {
int x = 10;
System.out.println("Before: " + x);
modifyValue(x);
System.out.println("After: " + x);
}
public static void modifyValue(int num) {
num = 20; // 修改形式参数的值
}
}
上述代码输出结果为:
makefile
Before: 10
After: 10
在这个例子中, modifyValue
方法接收一个值为 10
的参数 num
,然后修改了 num
的值为 20
。但是,这个修改并不影响 main
方法中的变量 x
的值。
2. 引用传递(Pass by Reference):
在Java中,虽然对象引用是通过值传递的,但是通过引用传递对象引用,实际上是传递了对象引用的副本。这样,在函数内对对象引用所指向的对象的修改会影响到实际参数。
java
public class PassByReferenceExample {
public static void main(String[] args) {
StringBuilder myStringBuilder = new StringBuilder("Hello");
System.out.println("Before: " + myStringBuilder);
modifyReference(myStringBuilder);
System.out.println("After: " + myStringBuilder);
}
public static void modifyReference(StringBuilder strBuilder) {
strBuilder.append(", World!"); // 修改对象引用所指向的对象
}
}
上述代码输出结果为:
makefile
Before: Hello
After: Hello, World!
在这个例子中, modifyReference
方法接收了一个 StringBuilder
对象引用,然后在对象上进行了修改。这个修改反映在 main
方法中的 myStringBuilder
对象上。
总体来说,Java中的参数传递是值传递,但对于引用类型的参数,传递的是对象引用的副本,因此在函数内对对象引用所指向的对象的修改会影响到实际参数。