一.运算符和表达式
运算符:对常量或变量进行操作的符号
如:+ - * /
表达式:用运算符把常量或变量连接起来的,符合Java语法的式子
如:a + b
二.算术运算符
1.分类:
+ - * / %
运算符 / :
1.整数相除得到整数,如果想要结果是小数,必须要有小数参数
2.小数直接参与运算,得到的结果可能是不精确的
如:System.out.println(10 / 3);//结果为3
System.out.println(10.0 / 3)//3.3333333333335
运算符 % :取余 / 取模
是除法运算,但是得到的结果是余数
如:System.out.println( 10 % 2); // 结果为0
System.out.println(10 % 3);// 3
这个运算符可以用来判断奇偶数
示例:键盘录入一个三位数,输出其个位、十位、百位
import java.util.Scanner;
public class Day_02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int one = num % 10;//个位
int two = num / 10 % 10;//十位
int three = num / 100 % 10;//百位
System.out.println(one);
System.out.println(two);
System.out.println(three);
}
}
输出:
获取任意一个数上每一位数的公式:
个位:数字 % 10
十位:数字 / 10 % 10
百位:数字 / 100 % 10
千位:数字 / 1000 % 10
.....以此类推
2.算术运算符 “+” 操作的三种情况
2.1.数字相加
2.2.字符串相加:
当 “+” 操作中出现字符串时,这个 “+” 是字符串连接符,不是算术运算符了
“+” 会将前后的数据进行拼接,产生一个新的字符串
连续进行 “+” 操作时,从左到右逐个执行
字符串只有 + 操作,没有其他操作
示例:
"123" +123 结果为"123123"
1 + 99 + "编程" 结果为 "100编程" ,从左到右,要先计算 1 + 99
1 + 2 + "abc" + 2 + 1 结果为"3abc21" ,后 边的 2 和 1 不能相加
int age = 18;
System.out.println ("我的年龄是" + age + "岁")
结果为"我的年龄是18岁" , 因为age已经被赋值
2.3.字符相加:
当(字符+字符)或(字符+数字)时,会把字符通过ASCII码表查询到对应数字再进行计算
示例:
public class Demo{
public static void main(String[] args) {
char ch = 'a';
int ret = ch + 0;
System.out.println(ret);
}
}
输出:
ASCII码中:'a'------97, 'A'------65
三.类型转换
1.隐式转换
也叫自动类型提升
取值范围小的数值——>取值范围大的数值
1.1 提升规则:
(1)取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算
(2)byte、short、char三种类型的数据在运算的时候,都会先提升为 int 类型,然后再进行运算
1.2 示例 :
double a = 10;
System.out.println(a);//10.0
10是整数,整数默认是 int 类型
double取值范围大于 int,所以可以直接赋值给double类型
int i = 10
long n = 20L;
result = i + n;
i 是 int 类型,n 是 long 类型;取值范围 long > int
所以变量 i 里的值会自动提升为 long 类型,变量result最终是 long 类型
1.3 注意点 :
取值范围:
byte < short < int < long < float < double
什么时候转换:
数据类型不一样,不能进行计算,需要转换成一样的才可以
转换规则:
byte short char 类型的数据在运算的时候,都会提升为 int,再运算
2.强制转换:
取值范围大的数值——>取值范围小的数值
书写格式:
目标数据类型 变量名 = (目标数据类型)被强制转换的数据
示例:
public class Demo1{
public static void main(String[] args) {
double a = 3.14
int b = (int) a;
System.out.println(b);//3
}
}
四.自增自减运算符
分类:
++ 自增运算符,把变量里的值 +1
-- 自减运算符,把变量里的值 -1
不管是先++(++a),还是后++(a++),单独写在一行时,运算结果是一样的
示例:
public class Demo3 {
public static void main(String[] args) {
int x = 10;
int y = x++;//10,先用x,x再+1
int z = ++x;//12,x先+1
System.out.println("x:" + x);
System.out.println("y:" + y);
System.out.println("z:" + z);
}
}
输出:
五.赋值运算符
最常用的:=
把等号右边的结果赋值给左边的变量
示例:
public class Day02_3 {
public static void main(String[] args) {
int x = 10;
System.out.println(x);
int z = 20;
int y = x + z;
System.out.println(y);
}
}
六.扩展赋值运算符
符号 | 作用 | 说明 |
+= | 加后赋值 | a+=b,将a+b的值给a |
-= | 减后赋值 | a-=b,将a-b 的值给a |
*= | 乘后赋值 | a*=b,将a*b的值给a |
/= | 除后赋值 | a/=b,将a/b的值给a |
%= | 取余后赋值 | a%=b,将a%b的值给a |
示例:
int a = 10;
int b = 20;
a += b;//相当于a = a + b
注意点: .扩展赋值运算符中还包含了一个强制类型转换
a+=b,相当于 a = (byte)(a + b)
六.关系运算符
也叫比较运算符
分类:
符号 | 解释 |
== | 就是判断左边跟右边是否相等,如果成立就是true,如果不成立就是false |
!= | 就是判断左边跟右边是否不相等,如果成立就是true,如果不成立就是false |
> | 就是判断左边是否大于右边,如果成立就是true,如果不成立就是false |
>= | 就是判断左边是否大于等于右边,如果成立就是true,如果不成立就是false |
< | 就是判断左边是否小于右边,如果成立就是true,如果不成立就是false |
<= | 就是判断左边是否小于等于右边,如果成立就是true,如果不成立就是false |
关系运算符最终的结果是布尔类型,要么是true,要么是flase
七.逻辑运算符
符号 | 作用 | 说明 |
& | 逻辑与 | 并且 |
| | 逻辑或 | 或者 |
^ | 逻辑异或 | 相同为flase,不同为true |
! | 逻辑非 | 取反 |
!的使用:
计算规则:flase取反就是true,true取反就是flase
取反最多用一个
八.短路逻辑运算符
1.&&:
运算结果跟 & 一样,只不过具有短路效果,效率更高
2.||:
运算结果跟 | 一样,也具有短路效果,效率更高
3.区别:
(1)& |:无论左边 false 或 true,右边都要执行
(2)&& || :如果左边就能确定整个表达式的结果,右边不执行
(3)&&:左边为false,右边不管是真是假,整个表达式的结果一定是false
(4)||:左边为true,右边不管是真是假,整个表达式的结果一定是true
九.三元运算符
1.格式:
关系表达式 ?表达式1:表达式2;
2.计算规则:
首先计算关系表达式值
如果值为true,运算结果为表达式1的值
如果值为flase,运算结果为表达式2的值
3.示例:
示例一:获取两个整数的较大值
public class Day02_4 {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
int max = num1 > num2 ? num1 : num2;
//表达式的值为false,结果就是num2的值
System.out.println(max);
}
}
输出:
示例二:有三个和尚,身高分别为150cm、210cm、165cm,获取这三个和尚的最高身高
public class Day02_4 {
public static void main(String[] args) {
int height1 = 150;
int height2 = 210;
int height3 = 165;
//1.第一个和尚与第二个和尚比较
int temp = height1 > height2 ? height1 : height2;
//2.拿1的结果跟第三个和尚进行比较
int max = temp > height3? temp : height3;
System.out.println(max);
}
}
输出: