一、算术运算符
操作符 | 描述 | 例子 |
---|---|---|
+ | 加法 - 相加运算符两侧的值 | 10 + 20 等于 30 |
- | 减法 - 左操作数减去右操作数 | 10 – 20 等于 -10 |
* | 乘法 - 相乘操作符两侧的值 | 10 * 20等于200 |
/ | 除法 - 左操作数除以右操作数 | 20 / 10等于2 |
% | 取余 - 左操作数除以右操作数的余数 | 20%10等于0 |
注意事项:
/
和%
的区别:两个数据做除法,/
取结果的商
,%
取结果的余数
。
整数操作只能得到整数,想要得到小数,必须有浮点数参与运算。
public class OperatorDemo01 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a + b = " + (a + b) );
System.out.println("a - b = " + (a - b) );
System.out.println("a * b = " + (a * b) );
System.out.println("b / a = " + (b / a) );
System.out.println("b % a = " + (b % a) );
System.out.println("c % d = " + (6.0 % 4) );
}
}
字符的"+"操作
拿字符在计算机底层对应的数值来进行计算
'A' ==>'Z' 连续的65起
'a' ==>'z' 连续的97起
'0' ==>'9' 连续的48起
public class OperatorDemo02 {
public static void main(String[] args) {
//定义两个变量
int i = 10;
char c = 'A';//'A'的值是65
System.out.println(i+c);
c = 'a';//'a'的值是97
System.out.println(i+c);
c = '0';//'0'的值是48
System.out.println(i+c);
}
}
算术表达式中包含多个基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。
提升规则:
- byte类型,short类型和char类型将被提升的int类型
- 整个表达的类型自动提升到表达式中最高等级操作数同样的类型
等级顺序:byte,short,char => int => long => float => double
public class OperatorDemo02 {
public static void main(String[] args) {
//定义两个变量
int i = 10;
char c = 'A';//'A'的值是65
System.out.println(i+c);
c = 'a';//'a'的值是97
System.out.println(i+c);
c = '0';//'0'的值是48
System.out.println(i+c);
//char ch = i + c;
//char类型会被自动提升为int类型
int j = i + c;
System.out.println(j);
//int k = 10 + 13.14;
double g = 10 + 13.14;
System.out.println(g);
}
}
字符串的"+"操作
当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算符。
在“+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。
public class OperatorDemo03 {
public static void main(String[] args) {
System.out.println("Hello" + "World");
System.out.println("Hello" + "World" + 666);
System.out.println(666 + "Hello");
System.out.println("Hello" + 666 + 6);
//Hello6666
System.out.println(999 + 1 + "Hello");
//1000Hello
}
}
二、赋值运算符
操作符 | 描述 | 例子 |
---|---|---|
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 | C = A + B将把A + B得到的值赋给C |
+ = | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 | C + = A等价于C = C + A |
- = | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 | C - = A等价于C = C - A |
* = | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 | C * = A等价于C = C * A |
/ = | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 | C / = A,C 与 A 同类型时等价于 C = C / A |
%= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 | C%= A等价于C = C%A |
扩展的赋值运算符隐含了强制类型转换
public class OperatorDemo04 {
public static String getType(Object test) {
return test.getClass().getName().toString();
}
public static void main(String[] args) {
//把10赋值给int类型的变量i
int i = 10;
System.out.println("i:" + i);
i += 20;
System.out.println("i:" + i);
//注意:扩展的赋值运算符底层隐含了强制类型转换
short s = 10;
s += 20;
System.out.println(getType(s));
System.out.println("s:" + s);
}
}
三、自增自减运算符
B=20
操作符 | 描述 | 例子 |
---|---|---|
++ | 自增: 操作数的值增加1 | B++ 或 ++B 等于 21(区别详见下文) |
-- | 自减: 操作数的值减少1 | B-- 或 --B 等于 19(区别详见下文) |
public class OperatorDemo05 {
public static void main(String[] args) {
//定义变量
int i = 10;
System.out.println("i:" + i);
//单独使用
i++;
System.out.println("i:" + i);
++i;
System.out.println("i:" + i);
//参与操作使用
int j = i++;
System.out.println("j:" + j);
int g = ++i;
System.out.println("g:" + g);
}
}
注意事项
- ++和--既可以放在变量的后边,也可以放在变量的前边。
- 单独使用的时候,++和--无论是放在变量的前边还是后边,结果是一样的。
- 参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。
- 参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。
最常见的用法:单独使用
四、关系运算符
运算符 | 描述 | 例子 |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B)为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A <B)为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A> = B)为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B)为真。 |
注意事项:
关系运算符的结果都是boolean类型,要么是true,要么是false。
千万不要把“==”误写成“=”
public class OperatorDemo06 {
public static void main(String[] args) {
//定义变量
int i = 10;
int j = 20;
int k = 10;
System.out.println(i == j);
System.out.println(i == k);
System.out.println("---------------");
System.out.println(i != j);
System.out.println(i != k);
System.out.println("---------------");
System.out.println(i > j);
System.out.println(i > k);
System.out.println("---------------");
System.out.println(i == j);
System.out.println(i == k);
System.out.println("---------------");
System.out.println(i >= j);
System.out.println(i >= k);
System.out.println("---------------");
//不小心把==写成了=
//把j的值赋值给了i,然后输出i的值
System.out.println(i = j);
}
}
五、逻辑运算符
操作符 | 描述 | 例子 |
---|---|---|
& | 称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A & B)为假。 |
| | 称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 | (A | B)为真。 |
! | 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。 | !(A & B)为真 |
^ | 称为逻辑异或算符。 | (A ^ B)为真 |
public class OperatorDemo07 {
public static void main(String[] args) {
//定义变量
int i = 10;
int j = 20;
int k = 30;
//& 有false则有false
System.out.println((i > j) & (i > k));
System.out.println((i < j) & (i > k));
System.out.println((i > j) & (i < k));
System.out.println((i < j) & (i < k));
System.out.println("---------------");
//| 有true则true
System.out.println((i > j) | (i > k));
System.out.println((i < j) | (i > k));
System.out.println((i > j) | (i < k));
System.out.println((i < j) | (i < k));
System.out.println("---------------");
//^ 相同为false,不同为true
System.out.println((i > j) ^ (i > k));
System.out.println((i < j) ^ (i > k));
System.out.println((i > j) ^ (i < k));
System.out.println((i < j) ^ (i < k));
System.out.println("---------------");
//!
System.out.println(!(i > j) );
System.out.println(!!(i > j) );
System.out.println(!!!(i > j) );
System.out.println(!!!!(i > j) );
System.out.println("---------------");
}
}
短路逻辑运算符
操作符 | 描述 | 例子 | |
---|---|---|---|
&& | 短路与 | 作用和&相同,但是有短路效果 。 | |
| | | 短路或 | 作用和 | 相同,但是有短路效果 。 |
注意事项:
- 逻辑与&,无论左边真假,右边都要执行。
短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行; - 逻辑或|,无论左边真假,右边都要执行。
短路或||,如果左边为假,右边执行;如果左边为真,右边不执行;
public class OperatorDemo08 {
public static void main(String[] args) {
//定义变量
int i = 10;
int j = 20;
int k = 30;
//&& 有false则有false
System.out.println((i > j) && (i > k));
System.out.println((i < j) && (i > k));
System.out.println((i > j) && (i < k));
System.out.println((i < j) && (i < k));
System.out.println("---------------");
//|| 有true则true
System.out.println((i > j) || (i > k));
System.out.println((i < j) || (i > k));
System.out.println((i > j) || (i < k));
System.out.println((i < j) || (i < k));
System.out.println("---------------");
//&与&&的区别
// System.out.println((i++ > 100) & (j++ > 100));
System.out.println((i++ > 100) && (j++ > 100));
System.out.println("i:" + i);
System.out.println("j:" + j);
}
}
六、三元运算符
格式
关系表达式 ?表达式1 :表达式2
范例
a > b ? a : b
执行流程
首先计算关系表达式的值
如果值为true,表达式1的值就是运算结果
如果值为false,表达式2的值就是运算结果
public class OperatorDemo09 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//获取两个数中较大值
int max = a > b ? a : b;
System.out.println("max:" + max);
}
}
网友评论