Java基础:基本语法(四)
第四节:运算符和表达式
a + b
3 * 2
整体叫做表达式
a,b,3,2-->操作数
+,*-->运算符
1、运算符的分类
1.算术运算符:+ 、 - 、 * 、 / 、 % 、 ++ 、 --
2.赋值运算符:= 、 += 、 -= 、 *= 、 /= 、 %=
3.关系运算符:> 、 < 、 >= 、 <= 、 == 、 !=
4.逻辑运算符:! 、 & 、 | 、 ^ 、 && 、 ||
5.位运算符:& 、 | 、 ^ 、 ~ 、 >> 、 << 、 >>>(了解)
6.字符串连接运算符:+
7.三目运算符 ?:
2、算术运算符:
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
+ | 正号 | +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 | 0 |
– | 自减 | int a=3;a–/--a | 3 |
-
使用算术运算符是需要注意
-
加法运算符在连接字符串时要注意,只有直接与字符串相加才会转成字符串。
-
除法“/”当两边为整数时,取整数部分,舍余数。当其中一边为浮点型时,按正常规则相除。
-
“%”取模(取余数),小数取余没有意义。结果符号与被取余符号相同。
-
算术运算符 ++ , --的使用
-
++运算符:会在原有值得基础上自增1。
-
–运算符:会在原有值得基础上自减1。
上机练习1 : 有一个三位数,求十位上 的数字
// 123 2
int a = 123;
int b = a/10%10;
// 123/10 12%10 2
int c = a%100/10;
上机练习2:
int d = 5;
System.out.println((d++));// 自身加1
System.out.println((d));// 自身加1
int e = d++ + 6;
System.out.println(" =e "+ e);// 自身加1
// -- 放在前面是先自身减一 在参与运算
// 放后面 先参与运算 在自身减一
int f = d-- + 6;
System.out.println(" f = "+ f);// 自身加1
byte z = -128;
byte w = --z;// ++ 在临界值不会报异常,赋的值是在取值范围内转圈
System.out.println("w= "+ w);// 自身加1
3、赋值运算符:
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
= | 赋值 | 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 i = 34;
//i = i + 45;
i+=45;
i-=45;
// i = i -45;
i*=45;
i/=45;
i%=45;
System.out.println("i= "+ i);
4、关系运算符:
-
比较运算符,又叫关系运算符,它是用来判断两个操作数的大小关系及是否相等关系的,结果是布尔值true或者false 。
运算符 运算规则 范例 结果 == 相等于 4==3 False != 不等于 4!=3 True < 小于 4<3 False > 大于 4>3 True <= 小于等于 4<=3 False >= 大于等于 4>=3 True
boolean b = 3>=3; // 关系运算符 最终的结果都是boolean类型的
boolean b2 = 3==2; // == 判断等号两边是否相等 如果相等就是true
boolean b3 = 3!=2; // != 判断等号两边是否不等 如果不等就是true
System.out.println(b3);
5、逻辑运算符(重点)
-
逻辑运算符,它是用于布尔值进行运算的,运算的最终结果为布尔值true或false
运算符 运算规则 范例 结果 & 与,理解为并且 false&true False | 或,理解为或者 false|true True ^ 异或 true^flase True ! 非 !true Flase && 短路与 false&&true False || 短路或 false||true True -
&:与运算,运算规则:多个操作数,如果都为true,结果就为true,有一个为false,结果就为false。
**一假则假,全真才真**
-
|:或运算,运算规则:多个操作数,如果都为false,结果就为false,有一个为true,就为true
**一真则真,全假才假**
-
&&:短路与,遇到一个false就返回结果为false,后面不再计算
-
||:短路或,遇到一个true就返回结果为true,后面不再计算
-
!:取非,取反
-
^:异或操作,操作数值不同,结果为真,相同反而为假。
// == 判断基本数据类型的值 是否相同的 != 判断基本数据类型的值是否不等
// 引用数据类型 equals
int i=30;
boolean flag = i!=34;
System.out.println("flag = "+ flag);
boolean flag2 = false&false;// & 必须是左右两边都是 true 结果才是true
boolean a = false | false;// | 只要有一个true 结果就是true 两边都是false 结果才为false
System.out.println("flag2 = "+ flag2);
System.out.println("a = "+ a);
// && || 有可能有一部分是执行不到的
// && 左边如果是 false 就不执行右边 最终结果是false
// || 左边是true 不用执行右边了 最终结果就是 true
int z = 5;
int w = 5;
boolean b = ++z>5 || ++w >5;// w 并没有被执行
System.out.println("b = "+ b+" z="+z+" w="+w);
// ! 逻辑非
boolean e = !true;
System.out.println("e = "+ e);
// ^ 异或 相同则为false 不同为true
boolean f = true ^ false;
System.out.println("f = "+ f);
int a = 4;
int c = 5;
boolean b4 = ++a>6 & ++c>3;
System.out.println(a);
System.out.println(c);
6、位运算符(了解)
运算符 | 描述 | 运算符 | 描述 |
---|---|---|---|
& | 按位与 | >> | 右移 |
| | 按位或 | << | 左移 |
^ | 按位异或 | >>> | 无符号右移 |
~ | 按位取反 |
7、字符串连接符 +
如果字符串和基本数据类型变量、常量连接以后,结果变成了字符串。
System.out.println("Hello"+"World!");
System.out.println("Hello = "+ 5);// 字符串和基本数据类型变量 常量连接以后 都变成了 字符串
System.out.println("Hello = "+ 5+ 8);
System.out.println(5+"");
8、三目运算符 ? :
X ? Y : Z
X为boolean类型表达式,先计算x的值,若为true,整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
示例:
//X ? Y : Z
// 1 X 必须是boolean类型表达式
// 2 Y Z 必须数据类型保持一致
int score = 99;
//boolean falg = score>80;
String str = score>80? "非常优秀" : "优秀";
char c = '男';
int i = c=='男'? 5 : (int)(4.0);
// y 和 z 最好是保持数据类型一致
// 如果不一致 也必须保证 接收的 变量能够存储 y和 z的 数据类型
System.out.println(i);
// 需求: 大于90输出"非常优秀“,大于等于60”输出及格“,否则小于60输出”下个班见“
String str2 = score>90?"非常优秀":score>=60?"及格":"下个班见";
System.out.println(str2);
9、表达式
表达式:符合一定语法规则的运算符和操作数的序列
i % 10
a = 0
a==0
5.0 + a
(a - b) * c - 4
i < 30 && i % 10 != 0
表达式的值和类型
* 对表达式中操作数进行运算得到的结果称为表达式的值
* 表达式的值的数据类型即为表达式的类型
扩展:Scanner的简单使用
需求:从控制台输入学员3门课程成绩(html,java,sql),编写程序实现
(1)Java课和SQL课的分数之差
(2)3门课的平均分
import java.util.Scanner; //导入Scanner类
public class ScoreStat {
public static void main(String[] args) {
//创建对象
Scanner input = new Scanner(System.in);
System.out.print("htmls的成绩是:");
int html = input.nextInt(); //html分数
int java = input.nextInt();
int sql = input.nextInt();
int diffen; //分数差
double avg; //平均分
//省略输出成绩单代码……
diffen = java - sql; //计算Java课和SQL课的成绩差
System.out.println("Java和SQL的成绩差:" + diffen);
avg = (html + java + sql) / 3; //计算平均分
System.out.println("3门课的平均分是: " + avg);
}
}