1. 运算符介绍
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
2. 算术运算符
对数值类型的变量进行运算的。
算术运算符表
运算符 | 作用 |
---|---|
加法运算符(+ ) |
用于将两个数值相加 |
减法运算符(- ) |
用于从第一个数值中减去第二个数值 |
乘法运算符(* ) |
用于将两个数值相乘 |
除法运算符(/ ) |
用于将第一个数值除以第二个数值 |
取余运算符(% ) |
用于计算第一个数值除以第二个数值的余数 |
自增运算符(++ ) |
用于将变量的值增加1 |
自减运算符(-- ) |
用于将变量的值减少1 |
简单示例
public class ArithmeticOperators {
public static void main(String[] args) {
int a = 5;
int b = 10;
int sum = a + b; // 加法
int difference = a - b; // 减法
int product = a * b; // 乘法
int quotient = b / a; // 除法
int remainder = b % a; // 取余
a++; // 自增
b--; // 自减
System.out.println("Sum: " + sum);
System.out.println("Difference: " + difference);
System.out.println("Product: " + product);
System.out.println("Quotient: " + quotient);
System.out.println("Remainder: " + remainder);
System.out.println("a after increment: " + a);
System.out.println("b after decrement: " + b);
}
}
输出结果:
Sum: 15
Difference: -5
Product: 50
Quotient: 2
Remainder: 0
a after increment: 6
b after decrement: 9
前缀自增和后缀自增的区别
简单示例
public static void main(String[] args) {
int x = 5;
int y = ++x;
System.out.println("前缀自增:" + x);
System.out.println("前缀自增:" + y);
int a = 5;
int b = a++;
System.out.println("后缀自增:" + a);
System.out.println("后缀自增:" + b);
}
输出结果
前缀自增:6
前缀自增:6
后缀自增:6
后缀自增:5
区别
- 前缀自增(++variable):先将变量的值增加1,然后返回增加后的值。
- 后缀自增(variable++):先返回变量的当前值,然后再将变量的值增加1。
3. 关系运算符(比较运算符)
介绍
- 关系运算符的结果都是boolean型,也就是说要么都是true,要么都是false
- 关系表达式,经常用在if结构的条件中或循环结构的条件中
关系运算符表
运算符 | 作用 |
---|---|
大于 (> ) |
如果左边的值大于右边的值,则结果为true |
小于 (< ) |
如果左边的值小于右边的值,则结果为true |
大于等于 (>= ) |
如果左边的值大于或等于右边的值,则结果为true |
小于等于 (<= ) |
如果左边的值小于或等于右边的值,则结果为true |
等于 (== ) |
如果两个操作数的值相等,则结果为true 。对于基本数据类型,它比较的是值;对于引用类型,它比较的是对象的引用是否相同,而不是内容是否相同 |
不等于 (!= ) |
如果两个操作数的值不相等,则结果为true |
instanceof | 对象是否是指定类型的实例或其子类的实例。如果是,则结果为true ;否则为false |
简单示例
int a = 10;
int b = 20;
boolean isGreater = a > b; // false,因为10不大于20
boolean isEqual = a == b; // false,因为10不等于20
boolean isNotEqual = a != b; // true,因为10不等于20
4. 逻辑运算符
介绍
用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值。
逻辑运算符表
运算符 | 作用 |
---|---|
&& (短路与) |
如果左侧的操作数为false ,则不会计算右侧的操作数,直接返回false 。如果左侧为true ,则继续计算右侧,并根据两侧的结果返回true 或false |
& (非短路与) |
无论左侧的操作数是什么,都会计算右侧的操作数,并根据两侧的结果返回true 或false |
|| (短路或) |
如果左侧的操作数为true ,则不会计算右侧的操作数,直接返回true 。如果左侧为false ,则继续计算右侧,并根据两侧的结果返回true 或false |
| (非短路或) |
无论左侧的操作数是什么,都会计算右侧的操作数,并根据两侧的结果返回true 或false |
!(逻辑非) | 用于反转操作数的布尔值。如果操作数为true ,则结果为false ;如果操作数为false ,则结果为true |
^(逻辑异或) | 如果两个操作数的布尔值不同,则结果为true ;如果相同,则结果为false |
? (三目)运算符) |
它的格式为条件 ? 表达式1 : 表达式2 。如果条件为true ,则结果为表达式1的值;如果条件为false ,则结果为表达式2的值 |
注意:短路逻辑运算符(&&
和||
)在实际编程中经常被使用,因为它们可以提高效率,特别是在涉及复杂条件判断时。当使用短路逻辑运算符时,如果左侧的操作数已经足够确定整个表达式的值,那么右侧的操作数将不会被评估,这可以避免不必要的计算或潜在的错误。
简单示例
public class LogicalOperators {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
// 逻辑与(AND)
boolean andResult = a && b; // false,因为b为false
boolean andResult2 = a & b; // false,因为b为false
// 逻辑或(OR)
boolean orResult = a || b; // true,因为a为true
boolean orResult2 = a | b; // true,因为a为true
// 逻辑非(NOT)
boolean notResult = !a; // false,因为a为true
// 逻辑异或(XOR)
boolean xorResult = a ^ b; // true,因为a和b的布尔值不同
// 条件(三目)运算符
boolean condition = true;
String result = condition ? "True" : "False"; // result的值为"True"
// 输出结果
System.out.println("AND with &&: " + andResult);
System.out.println("AND with &: " + andResult2);
System.out.println("OR with ||: " + orResult);
System.out.println("OR with |: " + orResult2);
System.out.println("NOT: " + notResult);
System.out.println("XOR: " + xorResult);
System.out.println("Conditional (ternary) operator: " + result);
}
}
输出结果
AND with &&: false
AND with &: false
OR with ||: true
OR with |: true
NOT: false
XOR: true
Conditional (ternary) operator: True
5. 赋值运算符
介绍
将某个运算后的值,赋给指定的变量。
赋值运算符表
运算符 | 作用 |
---|---|
简单赋值运算符 (= ) |
最基本的赋值运算符,它将右侧表达式的值赋给左侧的变量 |
算术赋值运算符 (+= , -= , *= , /= , %= ) |
将算术运算的结果赋给左侧的变量 |
位运算赋值运算符 (&= , |= , ^= , <<= , >>= , >>>= ) |
将位运算的结果赋给左侧的变量 |
字符串连接赋值运算符 (+= 用于字符串连接) |
当+= 运算符用于字符串时,它将右侧的字符串连接到左侧的字符串的末尾 |
简单示例
int x = 5; // 将整数值5赋给变量x
int x = 5;
x += 3; // 等价于 x = x + 3; // x的值现在是8
x -= 2; // 等价于 x = x - 2; // x的值现在是6
x *= 4; // 等价于 x = x * 4; // x的值现在是24
x /= 2; // 等价于 x = x / 2; // x的值现在是12(如果是整数除法)
x %= 3; // 等价于 x = x % 3; // x的值现在是0(12除以3的余数是0)
int x = 5; // 二进制表示为 101
x &= 3; // 二进制表示为 011, 结果为 1 (101 AND 011 = 001)
x |= 6; // 二进制表示为 110, 结果为 7 (101 OR 110 = 111)
x ^= 4; // 二进制表示为 100, 结果为 3 (101 XOR 100 = 001)
x <<= 1; // 左移一位, 结果为 6 (101 << 1 = 1010, 即十进制的10)
x >>= 1; // 右移一位, 结果为 3 (1010 >> 1 = 101, 即十进制的5)
x >>>= 1; // 无符号右移一位, 结果为 2 (1010 >>> 1 = 010, 即十进制的2)
String str = "Hello";
str += " World"; // 等价于 str = str + " World"; // str的值现在是"Hello World"
注意:赋值运算符的左侧必须是一个可以赋值的变量,而右侧可以是一个表达式、常量或另一个变量的值。在Java中,赋值运算符是从右到左的结合性,这意味着在连续的赋值中,右侧的表达式会首先被计算。
6. 运算符优先级
不用背,不用背,不用背,多用自然就知道了。
优先级从高到低的列表
后缀运算符: |
一元运算符:+ 、- 、! 、++ 、-- |
乘法运算符: |
加法运算符: |
移位运算符: |
关系运算符: |
相等运算符: |
按位与运算符: |
按位异或运算符: |
按位或运算符: |
逻辑与运算符: |
逻辑或运算符: |
条件运算符: |
赋值运算符: |
7. 标识符的命名规则和规范
命名规则
- 标识符可以由字母、数字、美元符号($) 和 下划线(_) 组成。
- 标识符的第一个字符必须是字母、美元符号($) 或 下划线(_),不能以数字开头。
- 标识符不能是Java关键字和保留字。关键字是Java语言预定义的具有特定含义的单词,如"if"、"for"、"class"等。保留字是Java中未被使用,但被保留起来以备将来使用的单词。
- 标识符应具有描述性,以便其他开发人员能够理解其用途。
命名规范
- 类名:首个字母必须大写,多个单词组成的类名,每个单词的首字母都要大写。
- 方法名:一般首个字母小写(构造方法例外),多个单词组成的方法名,后续每个单词的首字母大写。
- 变量名:命名规则同方法名。
- 常量名:所有的字母都需要大写,单词与单词之间用下划线隔开。
- 推荐使用驼峰命名法作为标识符的命名风格。驼峰命名法包括大驼峰命名法(Pascal Case)和小驼峰命名法(Camel Case)。
注意:标识符在Java中是区分大小写的,即大写字母和小写字母是不同的标识符。