Java_运算符
01-算数运算符
+
-
*
---------------------------
/ : 整数相除, 结果只能得到整数, 想要得到带有小数的结果, 需要有小数参与运算
% : (取模) 得到的是除法之后剩下的余数
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数:");
int num = sc.nextInt();
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 100;
System.out.println("整数" + num + "的个位为:" + ge);
System.out.println("整数" + num + "的十位为:" + shi);
System.out.println("整数" + num + "的百位为:" + bai);
}
02-字符串的拼接操作
介绍: 当 + 号操作过程中, 如果遇到了字符串, 这时候就是字符串连接符了, 而不是算数运算符了
System.out.println("5+5=" + 5+5); // "5+5=55"
System.out.println("5+5=" + (5+5)); // "5+5=10"
03-自增自减运算符
++ : 让变量自身的值 + 1
-- : 让变量自身的值 - 1
1. 单独使用 (推荐)
一句代码当中, 只做 ++, --
int a = 10;
a++;
++a;
++, -- 在前在后没有区别的
2. 参与运算使用 (面试)
++在前: 先自增, 再操作
++在后: 先操作, 再自增
将该变量原本记录的值取出来, 做操作, 然后再进行自增
int a = 10;
int b = a++;
Systsem.out.println(a); // 11
Systsem.out.println(b); // 10
public static void main(String[] args) {
int x = 10;
int y = ++x;
int z = y++;
System.out.println("x=" + x);
System.out.println("y=" + y);
System.out.println("z=" + z);
System.out.println("----------------------");
int a = 10;
int b = (++a) + (a++) + (a*10);
System.out.println("a=" + a);
System.out.println("b=" + b);
}
注意事项: 自增自减运算符, 只能操作变量, 不能操作常量
04-类型转换-隐式转换
- 基本的类型转换 :
- 将取值范围小的数据, 给取值范围大的变量赋值, 可以直接赋值
- 简单记 : 小的给大的, 可以直接给
- 这里的小和大指的是, 取值范围
int a = 10;
double b = a;
System.out.println(b); // 10.0
byte - short - int - long - float - double
细节:float虽然占用4个字节, 但是取值范围要比8个字节的long更大
- 运算过程中的隐式转换 :
- 思路 : 如果数据类型不统一 , 是没有办法运算的
- 当取值范围小的数据, 和取值范围大的数据在一起运算的时候, 小的会将自己提升为大的类型, 然后再进行运算
- byte short char 这三个类型在运算的时候, 直接提升为 int 类型
05-类型转换-强制转换
- 将取值范围大的数据, 给取值范围小的数据赋值 , 不允许直接赋值, 需要强转
- 简单记 : 大的给小的, 不允许直接给, 需要强转
double a = 12.3;
int b = (int)a;
System.out.println(b); // 12
int a = 10;
byte b = (byte)a;
System.out.println(b); // 10
建议: 今后尽量减少强转的使用, [有可能]会造成精度损失
package com.itheima.test;
public class OperatorTest3 {
/*
需求: 阅读如下代码, 观察是否存在问题, 如果有, 请说明原因并改正
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
错误原因: b1和b2是两个byte类型, 在相加的时候, 会直接提升为int类型
提升之后, 就是两个int相加了, 相加的结果还是int, 将int给byte赋值, 属于大给小, 需要强转.
改正后:
byte b1 = 3;
byte b2 = 4;
byte b3 = (byte)(b1 + b2);
-------------------------------------------------------
byte b = 3 + 4;
疑惑: 这里的3和4是两个整数常量, 所有整数默认是int类型, 相加之后结果也应该是一个int
将int赋值给byte, 需要强转啊.
原因: 3和4是两个常量, Java存在常量优化机制
在编译的时候(javac), 就会将3和4相加, 计算出一个7的结果
.class(字节码文件中) : byte b = 7;
检查: 该结果数据是否在byte的取值范围内
不在: 编译失败
在: 编译通过
*/
public static void main(String[] args) {
byte b = 3 + 4;
}
}
06-赋值运算符
基本赋值运算符:
= : 将等号右边的数据, 赋值给左边的变量
int a = 10;
扩展赋值运算符:
+= : 将符号左右两边的数据, 做加法运算, 将结果赋值给左侧的变量
-= : 将符号左右两边的数据, 做减法运算, 将结果赋值给左侧的变量
*=
/=
%=
细节: 底层自带强转效果
07-关系运算符-比较运算符
>
>=
<
<=
==
!=
这些符号都是让数据直接做比较的, 就会得到boolean类型的true, false
注意: =号和==号是有区别的
=号 : 赋值操作
==号 : 比较操作
08-逻辑运算符
介绍:
1. 代码层面: 用于连接boolean类型的表达式, 或者是值
2. 理解层面: 可以整合多个条件, 为一段整体的逻辑
分类:
&(与) : 并且, 遇false则false
|(或) : 或者, 遇true则true
!(非) : 取反
^(异或) : 相同为false, 不同为true
09-短路逻辑运算符
& : 没有短路效果, 符号左边无论是true, 还是false, 右边都要继续执行
&& : 具有短路效果, 当符号左边为false的时候, 右边就不执行了
如果符号左边为true, 右边要继续执行
| : 没有短路效果, 符号左边无论是true, 还是false, 右边都要继续执行
|| : 具有短路效果, 当符号左边为true的时候, 右边就不执行了
如果符号左边为false, 右边要继续执行
结论: 今后为了提升效率逻辑运算符用的最多的
&& || !
10-三元运算符
- 介绍 : 可以根据一个判断条件, 达成二者选其一的效果
格式:
判断条件 ? 值1 : 值2;
执行流程:
1. 执行判断条件, 看其返回结果是true, false
2. true : 值1就最终结果
3. false : 值2就是最终结果
int a = 10;
int b = 20;
int max = a > b ? a : b;
11-运算符的优先级
熟练掌握()的使用
()的优先级是最高的.
12-流程控制语句分类
- 流程控制语句介绍 : 通过一些语句, 来控制程序的执行流程
- 分类:
- 顺序结构 : 所有Java程序, 默认就是顺序结构
- 分支结构 : if switch
- 循环结构 : for while do..while
13-分支结构语句 - if
if语句的格式1
if(判断条件){
语句体;
}
执行流程:
1. 执行判断条件,看其返回结果是true, false
2. true : 执行 {} 中的语句体
3. false : 不执行 {} 中的语句体
注意事项:
1. if语句的 () 和 {} 之间不要写分号
2. if语句的 {} 中, 如果是一条语句, {} 可以省略不写, 但是不建议!
3. if语句 () 中, 无论简单还是复杂, 只要给它一个boolean类型的数据, 就可以正常运作
if语句的格式2
if(判断条件){
语句体1;
}else{
语句体2;
}
执行流程:
1. 执行判断条件, 看其返回结果是true, false
2. true : 执行语句体1
3. false : 执行语句体2
if语句的第三种格式:
if(判断条件1){
语句体1;
}else if(判断条件2){
语句体2;
}else if(判断条件3){
语句体3;
}
...
else {
语句体n+1;
}
执行流程:
1. 执行判断条件1, 看其返回的结果是true, 还是false
true: 执行语句体1, 执行完毕后, 结束掉整个的if语句
false : 进入第二步
2. 执行判断条件2, 看其返回的结果是true, 还是false
true : 执行语句体2, 执行完毕后, 结束掉整个的if语句
false : 进入第三步
...
3. 如果给出的所有条件, 都是失败的, 将会执行最后的 else, 语句体n+1;
package com.itheima.test;
import java.util.Scanner;
public class IfTest1 {
/*
95~100 : 自行车一辆
90~94 : 游乐场玩一次
80~89 : 变形金刚一个
80以下 : 挨揍
*/
public static void main(String[] args) {
// 1. 使用Scanner键盘录入一个分数
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩:");
int score = sc.nextInt();
// 2. 判断分数在哪一个奖励的区间
if (score < 0 || score > 100) {
System.out.println("您的输入有误, 请检查是否是0~100之间的");
} else if (score >= 95 && score <= 100) {
// 3. 打印出对应的奖励
System.out.println("自行车一辆");
} else if (score >= 90 && score <= 94) {
System.out.println("游乐场玩一次");
} else if (score >= 80 && score <= 89) {
System.out.println("变形金刚一个");
} else {
System.out.println("挨揍");
}
}
}
package com.itheima.test;
import java.util.Scanner;
public class IfTest2 {
/*
95~100 : 自行车一辆
90~94 : 游乐场玩一次
80~89 : 变形金刚一个
80以下 : 挨揍
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的成绩:");
int score = sc.nextInt();
if (score >= 0 && score <= 100) {
// 代码能够走到这个 {} , 代表成绩绝对是 0~100之间的
// 我们就只需要考虑, 给什么奖励即可
if (score >= 95 && score <= 100) {
// 3. 打印出对应的奖励
System.out.println("自行车一辆");
} else if (score >= 90 && score <= 94) {
System.out.println("游乐场玩一次");
} else if (score >= 80 && score <= 89) {
System.out.println("变形金刚一个");
} else {
System.out.println("挨揍");
}
} else {
System.out.println("您的成绩输入有误, 请检查是否是0~100之间");
}
}
}