1. 运算符和表达式
- 运算符:对常量或者变量进行操作的符号
- 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。
- 举例说明:
2.算数运算符
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | |
- | 减 | |
* | 乘 | 同“×” |
/ | 除 | 同“÷” |
% | 取余 | 获取的是两个数据做除法的余数 |
注意事项:
/和%的区别:两个数据做除法,/ 取结果的商,%取结果的余数。
整数操作只能得到整数,要得到小数,必须有浮点数参与运算。
例:
public class Hello {
public static void main(String[] args) {
System.out.println(10+20);
System.out.println(10-20);
System.out.println(10*20);
// /(除法):Java中,整数相除结果只能得到整数,如果想得到小数,必须带有小数类型参与运算
System.out.println(5/2);//2.5,不四舍五入,把小数点后面的数全部砍掉,只留下2
System.out.println(5/2.0);
System.out.println(5.0/2);
System.out.println(5.0/2.0);
System.out.println("-----------------");
// %(取模):获取的是两个数据做除法的余数
System.out.println(5%2);
System.out.println(4%2);
}
}
2.1 案例
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
//1.使用Scanner键盘录入一个三位数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数:");
int num=sc.nextInt();
//2.个位的计算:数值%10
int ge=num%10;
//3.十位的计算:数值/10%10
int shi = num/10%10;
//4.百位的计算:数值/10/10%10
int bai = num/10/10%10;
System.out.println(ge);
System.out.println(shi);
System.out.println(bai);
}
}
2.2 字符串的“+”操作
当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算数运算。
- "itheima"+666 //itheima666
当连续进行“+”操作时,从左到右逐个执行。
- 1+99+"年黑马" //100年黑马
3.Package
通过Package来管理类文件代码
4.自增自减运算符
符号 | 作用 | 说明 |
---|---|---|
++ | 自增 | 变量自身的值加1 |
-- | 自减 | 变量自身的值减1 |
- ++和--既可以放在变量的后边,也可以放在变量的前边
public class Hello {
public static void main(String[] args) {
int num = 10;
++num;//num=num+1;
System.out.println(num);
System.out.println("-------------");
int a = 10;
int b = ++a;//a=11,b=11;
System.out.println(a);
System.out.println(b);
System.out.println("-------------");
int c = 10;
//会先将该变量原本记录的值,提取出来参与运算,然后变量再进行自增长
int d = c++;//d=10,c=11;
System.out.println(c);//11
System.out.println(d);//10
//System.out.println(10++);//10=11,错误
}
}
注意事项:
- 单独使用的时候,++和--无论是放在变量的前边还是后边,结果是一样的
- 参与操作的时候,如果放在变量的后边,先将该变量原本的值,取出来参与操作,随后在进行自增(++)/自减(--)
- 参与操作的时候,如果放在变量的前边,变量先完成自增长,然后再参与运算。
- 最常见的做法还是单独使用
- ++、--只能操作变量,不能操作常量
5.类型转换
类型转换的分类:隐式转换、强制转换
5.1 隐式转换介绍
- 把一个取值范围小的数值或者变量,赋值给另一个取值范围大的变量
范例:
int a = 10;
double b = a;//此时b打印为10.0
运算中的隐式转换:
- 取值范围小的数据,和取值范围大的数据进行运算,小的会先提升为大的之后,再进行运算
- byte short char 三种数据在运算的时候,都会提升为int,然后再运算
此时会报错
此时正确
char提升为int,char的数值参考ASCII表
答案:double int double
5.2 强制转换介绍
- 把一个取值范围大的数值或变量,赋值给另一个取值范围小的变量,不允许直接赋值,需要加入强制转换
- 格式:目标数据类型 变量名=(目标数据类型)被强转的数据;
- 注意:强制类型转换有可能出现精度损失
范例:
double a = 12.9;
int b = (int)a;//b输出为12,不会进行四舍五入
long c = 123L;
int d = (int)c;
System.out.println(d);//123,没有精度损失,123在int取值范围当中
注意:
5.2.1 原码反码补码
- 原码:数据的二进制体现形式,一个字节由8个二进制位组成
弊端:遇到负数运算,可能会出现错误
注意:计算机在运算的时候,都是以二进制补码的形式在运算
- 反码:正数的反码与其原码相同,负数的反码是对其原码逐位取反,单符号位除外。
- 补码:正数的补码与其原码相同,负数的补码是在其反码的末位加1
多出来的1不要
6.赋值运算符
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | a=10,将10赋值给变量a |
+= | 加后赋值 | 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 |
例:
public class Hello {
public static void main(String[] args) {
int a = 10;
byte b =10;
//b=(byte)(b+a);
b+=a;//b=(byte)(b+a); //扩展赋值运算符,自带强制转换效果
System.out.println(b);
}
}
注意:扩展赋值运算符隐含了强制转换效果
7.关系运算符
符号 | 说明 |
---|---|
== | a==b,判断a和b的值是否相等,成立为true,不成立为false |
!= | a!=b,判断a和b的值是否不相等,成立为true,不成立为false |
> | a>b,判断a是否大于b,成立为true,不成立为false |
>= | a>=b,判断a是否大于等于b,成立为true,不成立为false |
< | a<b,判断a是否小于b,成立为true,不成立为false |
<= | a<=b,判断a是否小于等于b,成立为true,不成立为false |
注意事项:关系运算符的结果都是boolean类型,要么是true,要么是false。千万不要把“==”误写成“=”
8.逻辑运算符
逻辑运算符,是用来连接关系表达式的运算符,也可以直接连接布尔类型的常量或者变量。
8.1 逻辑运算符分类:
- &(与):并且,遇false则false,只有符号左右两边同时为true,结果才是true
- |(或):或者,遇true则true,只有符号左右两边同时为false,结果才是false
- !(非):取反
- ^(异或):相同为false,不同为true
public class Hello {
public static void main(String[] args) {
//&(与):并且
System.out.println(true&true);
System.out.println(false&false);
System.out.println(true&false);
System.out.println(false&true);
System.out.println("-----------------");
//|(或):或者
System.out.println(true|true);
System.out.println(false|false);
System.out.println(true|false);
System.out.println(false|true);
System.out.println("-----------------");
//!(非):取反
System.out.println(!true);
System.out.println(!!true);
System.out.println("-----------------");
//^(异或):
System.out.println(true^true);
System.out.println(false^false);
System.out.println(true^false);
System.out.println(false^true);
}
}
8.2 短路逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与 | 作用和&相同,但是有短路作用 |
|| | 短路或 | 作用和 | 相同,但是有短路作用 |
public class Hello {
public static void main(String[] args) {
int x=3;
int y=4;
//false&false
System.out.println(++x>4&y--<5);
System.out.println("x="+x);
System.out.println("y="+y);
}
}
public class Hello {
public static void main(String[] args) {
int x=3;
int y=4;
//false&&false
System.out.println(++x>4&&y--<5);
System.out.println("x="+x);
System.out.println("y="+y);
//&:没有短路效果,无论左边是true还是false,右边都要继续执行。
//&&:具有短路效果,当符号左边为false,右边就不执行了。如果符号左边为true,右边还要继续执行
}
}
注意事项:
- 逻辑与&,无论左边true false,右边都要执行。
- 短路与&&,如果左边为true,右边执行;如果左边为false,右边不执行。
- 逻辑或 |,无论左边true false,右边都要执行。
- 短路或 ||,如果左边为false,右边执行;如果左边为true,右边不执行。
9.三元运算符
格式 :关系表达式 ?值1:值2;
执行流程:首先计算关系表达式的值,如果值为true,值1就是运算结果,如果值为false,值2就是运算结果
public class Hello {
public static void main(String[] args) {
//求两个整数的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;
System.out.println(max);//20
}
}
9.1 案例
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
//1.使用Scanner键盘录入三个整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入三个整数");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int num3 = sc.nextInt();
//2.用三元运算符获取前两个整数的最大值,并用临时变量保存起来。
int temp = num1>num2?num1:num2;
//3.用三元运算符,让临时最大值和第三个整数进行比较,并记录结果。
int max = temp>num3?temp:num3;
//4.输出结果
System.out.println("最大值是:"+max);
}
}
10.运算符优先级