运算符
算术运算符
+(正号、加法、连接符)
连接符:任何类型的数据与字符串相连接,其结果都是字符串。
案例:
public static void main(String[] args) {
System.out.println(1 + “a” + 2 );
}
-
*
/
当除数为0时,运行程序会出现 java.lang.ArithmeticException: / by zero异常。
%(取模/取余)
public static void main(String[] args) {
System.out.println(-10 % 3);
System.out.println(-10 % -3);
System.out.println(10 % -3);
System.out.println(10 % 3);
}
注意:
1.结果的正负与被除数有关。
赋值运算符
= 赋值号,将符号右边数据赋给左边变量。
+= 把左边和右边相加,然后再赋给左边。
案例:
short s = 1;
//s = s + 1;会出现强制类型转换问题
// += 可以直接转换
s += 1;
System.out.println(s);
-=、*=、/=、%=
自增减
自增:给变量自身加1.
单独使用:放再操作数前面和后面的效果是一样的。
案例:
int i = 10;
++i;
System.out.println(i);
参与运算:
放在前面,先自增,后运算。
放在后面,先运算,再自增。
案例1:
int a = 3;
int b;
b = ++a;
System.out.println(b);
案例2:
public static void main(String[] args) {
int a = 10, b = 10, c = 10;
a = b++;
c = --a;
b = ++a;
a = c--;
System.out.println("a =" + a + ", b = " + b + ",c = " +c);
}
比较运算符
作用:用于连接比较表达式的,无论是操作简单还是复杂,其结果都是
boolean类型的。
>,<,>=,<=,!=,==
逻辑运算符
作用:用于连接逻辑表达式或值,其结果为boolean类型
&(与)
作用:当一边的结果为false时,其表达式结果就为false,否则true。
| (或)
作用:当一边的结果为true时,其表达式结果就为true,否则false。
!(非)
作用:将结果取反
^(异或)
作用:当两边结果一样为false,否则为true。
案例:
int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b & b < c);
System.out.println(a < b & b > c);
System.out.println(a > b & b < c);
System.out.println(a > b & b > c);
&&(短路与)
作用:和与符号作用一样。
&&与&区别:
如果使用&&,当左边为false时,右边就不执行了,其结果会直接被
判定为false。
如果使用&,不论左边是否为false,都会判断右边。
所以,&相对来说,比&&效率稍低。
||(短路或):如果左边为真,直接返回整个逻辑表达式的结果为真.
案例:
int x = 3;
int y = 4;
System.out.println((++x == 3) && (++y == 4));
System.out.println("x = " + x);
System.out.println("y = " + y);
位运算符
将两个进行位运算的操作数,先转换成二进制数,然后进行相应的位运算。
1表示true,0表示false
&,|,^,~(取反)
案例:
System.out.println(6 & 3);
System.out.println(6 | 3);
System.out.println(6 ^ 3);
System.out.println(~6);
注意:
一个数据对另一个数据异或两次,那么该数不变。
633=6
练习1:实现两个整数变量值的交换。
public static void main(String[] args) {
int a = 10;
int b = 20;
int temp;
temp = a;
a = b;
b = temp;
System.out.println("a = " + a + ", b = " + b);
}
额外条件:不允许有第三个变量出现。
public static void main(String[] args) {
int a = 10;
int b = 20;
a = a + b;
b = a - b;
a = a - b;
System.out.println("a = " + a + ", b = " + b);
}
缺陷:如果两个数比较大,那么它们的和很容易超出整型范围。
public static void main(String[] args) {
int a = 6;
int b = 3;
a = a ^ b;//
b = a ^ b;//
a = a ^ b;
System.out.println("a = " + a + ", b = " + b);
}
移位运算符
将操作数,先转换成二进制数,然后统一向对应的方向移动相应的位数。
<<(左移):左边最高位舍去,右边补0。
规律:向左移动几位,就是乘以2的几次幂。00000000 00000000 00000000 10100110
>>(右移):最高位是0,左边补0,最高位是1,左边补1.
规律:向右移动几位,就是除以2的几次幂。
>>>(无符号右移):无论最高位是0还是1,左边都补0.
案例:使用最高效率算2*8的结果.
System.out.println(2 << 3);
三元运算符
格式:布尔表达式 ? 结果1 : 结果2
当布尔表达式结果为true,返回结果1,否则返回结果2.
案例:
int i = 6 < 2 ? 3 : 2;
System.out.println(i);
案例2:
//比较两个整数是否相同
案例:获取三个数中的最大值
//比较两个整数是否相同
键盘录入格式
步骤:
1.在class那一行的上面写入:import java.util.Scanner;
2.创建扫描器对象:Scanner sc = new Scanner(System.in);
3.通过对象获取键盘录入数据:int num = sc.nextInt();
案例:通过键盘录入两个数据,求和。
//1.创建扫描器对象
Scanner sc = new Scanner(System.in);
//2.获取键盘录入数据
int num1 = sc.nextInt();
int num2 = sc.nextInt();
System.out.println(num1 + num2);
顺序结构语句
按照从上到下的顺序执行的语句。
判断语句
格式1:
if (比较表达式) {
语句体;
}
执行流程:
1.先计算比较表达式的值,看返回值是true还是false
2.如果是true就执行语句体的代码,否则不执行。
案例:大于18岁可以浏览页面
注意:
1.如果语句体只有一条语句,大括号可以省略。建议不要省略。
2.有大括号就没有分号,有分号就没有大括号。
格式2:
if (比较表达式) {
语句体1;
} else {
语句体2;
}
执行流程:
1.先计算比较表达式的值,看返回值是true还是false
2.如果是true就执行语句体1的代码,否则执行语句体2的代码。
案例:如果某个数等于0,男厕欢迎你
案例:判断两个数中的较大值
int x = 10;
int y = 20;
注意:
if…else语句与三元运算的区别:
三元运算必须有返回的结果,而if…else可以直接输出。
if…else能做到的,三元不一定能做到。
三元能做到的,if…else一定能做到。
案例:判断一个数是奇数还是偶数。
格式3:
if (比较表达式1) {
语句体1;
} else if(比较表达式2) {
语句体2;
} else if (比较表达式3) {
语句体3;
} ....
else {
语句体n+1;
}
执行流程:
1.先计算比较表达式1的值,看返回值是true还是false
2.如果是true就执行语句体1的代码,否则继续向下依次判断比较表达式。
3.满足条件就执行,如果都不满足,执行else中的代码。
注意:
最后的else是可以省略的。
案例:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数:");
int x = sc.nextInt();
if (x == 10) {
System.out.println("男厕所欢迎你");
} else if (x == 20) {
System.out.println("女测欢迎你");
} else {
System.out.println("您的性别无法识别");
}
}