目录
运算符
一、运算符概述
对常量和变量进行操作的符号称为运算符。
二、常用的运算符
1、算数运算符
1.1 算数运算符的概念
运算符 | 运算规则 | 范例 | 结果 |
+ | 正号 | +3 | 3 |
+ | 加 | 2+3 | 5 |
+ | 连接字符串 | “中”+“国” | “中国” |
- | 负号 | int a=3; -a | -3 |
- | 减 | 3-1 | 2 |
* | 乘 | 2*3 | 6 |
/ | 除 | 5/2 | 2 |
% | 取模(取余) | 5%2 | 1 |
++ | 自增 | int a=1; a++ / ++a | 2 |
-- | 自减 | int b=3; b-- / --b | 2 |
1.2 自增++ 和自减 --
++ 运算,变量自己增长1
-- 运算,变量自己减少1
1.2.1 独立运算:
变量前++ ,例如 ++i
变量后++ ,例如 i++
public static void main(String[] args) {
int a = 1;
a++;
System.out.println(a); // 2
++a;
System.out.println(a); // 3
}
1.2.2 和其他变量放在一起运算
public static void main(String[] args) {
int a = 1;
//int b = ++a; // a:2 b:2 注意:++在前表示先计算++ 再赋值
int b = a++; // a:2 b:1 注意:++在后表示先赋值 再计算++
System.out.println(a);
System.out.println(b);
}
1.3 练习
取出一个整数的千位上的数
int x = 321345;//取出千位上的数
int qian = x/1000%10;
浮点数 取出整数部分,取出小数部分
double x = 3.1415;
int zhenShu = (int)x;
System.out.println(zhenShu); // 3
double xiaoShu = x - zhenShu;
System.out.println(xiaoShu); // 0.1415
2、赋值运算符
2.1 赋值运算符的概念
将符号右边的值,赋给左边的变量。
注意: =左边一定是个变量, 右边有可能是变量也有可能是常量;
运算符 | 运算规则 | 范例 | 结果 |
= | 赋值 | int a=2 | 2 |
+= | 加后赋值 | int a=2,a+=2 | 4 |
-= | 减后赋值 | int a=2,a-=2 | 0 |
*= | 乘后赋值 | int a=2,a*=2 | 4 |
/= | 整除后赋值 | int a=2,a/=2 | 1 |
%= | 取模后赋值 | int a=2,a%=2 | 0 |
int a = 10;
a += 20; // 相当于 a = a + 20 -> a = 10 + 20 -> a = 30
2.2 练习
2.2.1
public static void main(String[] args) {
int a = 1;
short b = 2;
b = b + a;//编译失败
b += a;//3
System.out.println(b);
}
b = b + a; // 编译失败,因为short类型和int类型计算结果自动提升为int类型,赋给short类型会报错
b+=a; // 3 += 内部隐含了一个强转,当b = b+a行不通时,会自动变成:b=(short)(b+a)
2.2.2
public static void main(String[] args) {
byte b1 = 1;
byte b2 = 2;
//byte b3 = 1 + 2;
//byte b3 = b1 + b2;
//System.out.println(b3);
}
分析:
b3=1+2 ,1和2是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了1+2的结果并没有超过byte类型的取值范围,可以赋值给变量b3,因此b3=1+2 是正确的。
常量优化机制:
有一些计算,非常简单,例如常量和常量的计算就非常简单,在编译阶段就可以把这些简单的运算计算完。
反之, b4=b2+b3 ,b2和b3是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定b2+b3的结果是什么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败。
3、关系运算符(比较运算符、条件运算符、判断运算符)
3.1 关系运算符的概念
是用来 比较/判断 两个数据之间的关系,比较的结果是一个布尔类型的值,要么是true,要么是false。
运算符 | 运算规则 | 范例 | 结果 |
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
4、逻辑运算符
4.1 逻辑运算符的概念
是用来连接两个布尔类型结果的运算符,运算结果都是布尔值true 或者false。
运算符 | 运算规则 | 范例 | 结果 |
& | 与 | false&true | False |
| | 或 | false|true | True |
^(了解) | 异或 (相同:false,不同:true) | true^flase | True |
! | 非 | !true | Flase |
&& | 短路与 | false&&true | False |
|| | 短路或 | false||true | True |
4.2 && 和 ||
&& 短路与
短路特点:符号左边是false,右边不运算
|| 短路或
短路特点: 符号左边是true,右边不运算
结论:实际开发中都是使用短路与&&和短路或||,因为效率更高。
int x = 5;
int y = 3;
int a = 10;
int b =8;
/*
System.out.println(x<y & a++<b); // false
System.out.println(a); // 即使第一个表达式是false 也会计算第2个表达式 也就是执行了a++ a的值变为11
*/
System.out.println(x<y && a++<b); // false
System.out.println(a); //10 第一个表达式是false了结果就直接为false 不会执行第2个表达式 也就是没有执行a++ a的值还是10
5、三元运算符
5.1 三元运算符的概念
三元运算符格式:
数据类型 变量名 = 条件表达式?值1:值2
条件表达式为true时,值1 赋值给变量;条件表达式为false时,值2 赋值给变量。
5.2 练习
5.2.1 获取三个数中的最大值
int a = 10;
int b = 211;
int c = 444;
int max = a>b?(a>c?a:c):(b>c?b:c);
System.out.println(max);
*交换两个变量的值
方式一:使用temp临时变量
int a = 1;
int b = 2;
int temp = a;
a = b;
b = temp;
System.out.println(a); // 2
System.out.println(b); // 1
方式二:不使用临时变量
int a = 1;
int b = 2;
a = a + b;
b = a - b;
a = a - b;
System.out.println(a); // 2
System.out.println(b); // 1