目 录
018_算术运算符
1.1、运算符和表达式
运算符:对常量或者变量进行操作的符号。
表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。
不同运算符连接的表达式体现的是不同类型的表达式。
举例说明:
int a = 10;
int b = 20;
int c = a + b;
+:是运算符,并且是算术运算符。
a + b:是表达式,由于+是算术运算符,所以这个表达式叫算术表达式。
1.2、算术运算符
注意事项:
/和%的区别:两个数据做除法,/取结果的商,%取结果的余数。
整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
019_字符的+操作
1.3、字符的“+”操作
字符 char 可以与int型数据 做运算。【拿字符在计算机底层对应的数值来进行计算。】
char类型参与算术运算,使用的是计算机底层对应的十进制数值。需要我们记住三个字符对应的数值:
- 'a' -- 97 a-z是连续的,所以'b'对应的数值是98,'c'是99,依次递加
- 'A' -- 65 A-Z是连续的,所以'B'对应的数值是66,'C'是67,依次递加
- '0' -- 48 0-9是连续的,所以'1'对应的数值是49,'2'是50,依次递加
算术表达式中包含不同的基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。
提升规则:
- byte类型,short类型和char类型将被提升到int类型,不管是否有其他类型参与运算。
- 整个表达式的类型自动提升到与表达式中最高等级的操作数相同的类型
等级顺序:byte, short, char --> int --> long --> float --> double
byte b1 = 10; byte b2 = 20; // byte b3 = b1 + b2; // 该行报错,因为byte类型参与算术运算会自动提示为int,int赋值给byte可能损失 精度 int i3 = b1 + b2; // 应该使用int接收 byte b3 = (byte) (b1 + b2); // 或者将结果强制转换为byte类型 ------------------------------- int num1 = 10; double num2 = 20.0; double num3 = num1 + num2; // 使用double接收,因为num1会自动提升为double类型
tips:正是由于上述原因,所以在程序开发中我们很少使用byte或者short类型定义整数。也很少会使用char类型定义字符,而使用字符串类型,更不会使用char类型做算术运算。
020_字符串的+操作
1.4、字符串的“+”操作
当“+”操作中出现字符串时,这个”+”是字符串连接符,而不是算术运算。
- System.out.println("itheima"+ 666); // 输出:itheima666
在”+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算。当连续进行“+”操作时,从左到右逐个执行。
System.out.println(1 + 99 + "年黑马"); // 输出:199年黑马
021_赋值运算符
2.1、赋值运算符
赋值运算符的作用是将一个表达式的值赋给左边,左边必须是可修改的,不能是常量。
s += 20; // +=操作:隐含了 强制类型转换
注意事项:扩展的赋值运算符隐含了强制类型转换。
short s = 10;
s = s + 20; // 此行代码报错!!!因为运算中 s提升为int类型,运算结果int赋值给short可能损失精度
s += 20; // 此行代码没有问题,隐含了强制类型转换,相当于 s = (short) (s + 10);
022_自增自减运算符
3.1、自增自减运算符
注意事项:
- ++和-- 既可以放在变量的后边,也可以放在变量的前边。
- 单独使用的时候, ++和-- 无论是放在变量的前边还是后边,结果是一样的。
- 参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。
参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。
最常见的用法:单独使用
023_关系运算符
4.1、关系运算符
关系运算符有6种关系,分别为 小于、小于等于、大于、等于、大于等于、不等于。
注意事项:
关系运算符的结果都是boolean类型,要么是true,要么是false。
千万不要把“==”误写成“=”,"=="是判断是否相等的关系,"="是赋值。
024_逻辑运算符
5.1、逻辑运算符概述
逻辑运算符把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,
以判断程序中的表达式是否成立,判断的结果是 true 或 false。
5.2、逻辑运算符
025_短路逻辑运算符
5.3、短路逻辑运算符
在逻辑与运算中,只要有一个表达式的值为false,那么结果就可以判定为false了,没有必要将所有表达式的值都计算出来,短路与操作就有这样的效果,可以提高效率。同理在逻辑或运算中,一旦发现值为true,右边的表达式将不再参与运算。
026_三元运算符
6.1、三元运算符
三元运算符语法格式: 关系表达式 ? 表达式1 : 表达式2;【 范例:a > b ? a : b; 】
解释:问号前面的位置是判断的条件,判断结果为boolean型,为true时调用表达式1,为false时调用表达式2。其逻辑为:如果条件表达式成立或者满足则执行表达式1,否则执行第二个。
027_两只老虎
1、案例:两只老虎
2、代码and运行截图
028_三个和尚
1、案例:三个和尚
2、代码and运行截图
029_数据输入
1.1、数据输入概述
1.2、Scanner使用的基本步骤
我们可以通过 Scanner 类来获取用户的输入。使用步骤如下:
1、导包。Scanner类 在java.util包下,所以需要将该类导入。导包的语句必须定义在类定义的上面。
import java.util.Scanner;
2、创建Scanner对象。
Scanner sc = new Scanner(System.in);// 创建Scanner对象,sc表示变量名,其他均不可变。
3、接收数据。
int i = sc.nextInt(); // 表示将键盘录入的值作为int数返回。
030_三个和尚升级版
1、案例:三个和尚升级版
2、代码and运行截图
031_顺序结构
1.1、流程控制语句概述
在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。
1.2、流程控制语句分类
- 顺序结构
- 分支结构(if, switch)
- 循环结构(for, while, do…while)
1.3、顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多 数的代码都是这样执行的。
顺序结构执行流程图: