-
范围小的变量,可以直接赋值给类型范围大的变量
// 将char 类型 转换为 int 类型 char ch = 'a'; // a 在字符表中 代表的数字为 97 int code = ch; System.out.println(code); // 输出结果为97表达式的自动类型提升
-
在表达式中,小范围类型的变量会自动转换成当前较大的范围的类型在运算.
byte,short,char --> int --> long --> float --> double
注意事项:
-
表达式的最终结果类型由表达式中的最高类型决定
例如:
byte a = 10; int b = 20; double c = 1.0; double rs = a+b+c; // 因为c为double类型, 所以必须定义double变量来接收结果 int i = a+b+c; // 这种是错误写法 System.out.println(rs); double rs2 = a +b - 2.3; // 因为出现了小数,所以需要用double来接收结果 System.out.println(rs2);
-
在表达式中,byte,short,char 是直接转换成int类型参与运算的
例如:
byte i = 10; byte j = 20; int k = i+j; // 因为两个byte加起来容易越界,所以需要使用int来接收参数 System.out.println(k);
-
如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型
-
否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型
-
否则.如果其中一个操作数是long类型,另一个操作数将会转换为long类型
-
否则,两个操作数都将转换为int类型
-
类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错
强制类型转换
-
可以强行将类型范围大的变量,数据赋值给类型范围小的变量
数据类型 变量2 = (数据类型)变量1
int a = 20; byte b =(byte)a; // 将int 类型强转为byte类型
double score = 99.9; int i = ( int )score; // 会省略小数 System.out.println(i); // 打印的内容为:99运算符
-
运算符:对字面量或者变量进行操作的符号
| 符号 | 作用 | 说明 |
|---|---|---|
| + | 加 | 加法 |
| - | 减 | 减法 |
| * | 乘 | 乘法 |
| / | 除 | 除法 注意: 在Java中两个整数相除的结果还是整数 |
| % | 取余 | 获取两个数据做除法的余数 |
int a = 10; int b = 3; System.out.println(a + b); // 13 System.out.println(a - b); // 7 System.out.println(a * b); // 30 System.out.println(a / b); // 3 因为是两个int 类型的除法,所以最后结果为3 System.out.println(a % b); // 1
如果非得要得到小数该怎么办呢?
-
强制类型转换
int a = 10; int b = 3; System.out.println((double) a / b); // 3.3333333333333335
-
通过强制类型转换,将其结果转换为double类型,最后结果也就是小数类型了
-
输入一个数,分别拿出他的个位十位和百位.输出结果如下:
int i = 123; System.out.println(i+"个位数为:" + i % 10); System.out.println(i+"十位数为:" + i /10 % 10); System.out.println(i+"白位数为:" + i /100);“+”做连接符
-
“+” 符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串
-
能算则算 , 不能算就在一起
int a = 5;
System.out.println("abc"+'a'); // abca
System.out.println("abc"+a); // abc5
System.out.println(5 + a); // 10
System.out.println("abc"+5+'a'); // abc5a
System.out.println(15+"abc"+15); // 15abc15
System.out.println(a+'a'); // 102 字符a在字符表中是97,所以计算结果为102
System.out.println(a+ "" + 'a'); // 5a 因为中间有字符串,所以结果为字符串
System.out.println(a + 'a' + "abc"); // 102abc
System.out.println("abc"+ a + 'a'); // abc5a
System.out.println("abc"+(a + 'a')); // abc102
自增自减运算符
| 符号 | 作用 | 说明 |
|---|---|---|
| ++ | 自增 | 变量自身加1 |
| -- | 自减 | 变量自身减1 |
注意:
-
++ 和 -- 既可以放在变量的后边,也可以放在变量的前边
-
++ ,--只能操作变量,不能操作字面量
int a = 10; a++; // 等同于 a = a+1; System.out.println(a); // 11 int b = 10; b--; // b = b-1 System.out.println(b); // 9
注意输出结果:
int i = 10; int j = ++i; // 先将i+1,在将值赋值给j System.out.println(i); // 11 System.out.println(j); // 11 int m = 10; int n = m++; // 先将m的值赋值给n ,在将m+1 System.out.println(m); // 11 System.out.println(n); // 10赋值运算符
基本赋值运算符
-
就是 “ = ”
int a = 10; // 先看 " = "右边,把数据10赋值给左边变量a存储
扩展赋值运算符
| 符号 | 作用 | 说明 |
|---|---|---|
| += | 加后赋值 | a+=b 等价于 a = (a的数据类型)(a+b); 将a + b的值给a |
| -= | 减后赋值 | a-=b 等价于 a = (a的数据类型)(a-b); 将a - b的值给a |
| *= | 乘后赋值 | a*=b 等价于 a = (a的数据类型)(a*b); 将a * b的值给a |
| /= | 除后赋值 | a/=b 等价于 a = (a的数据类型)(a/b); 将a / b的值给a |
| %= | 取余后赋值 | a%=b 等价于 a = (a的数据类型)(a%b); 将a % b的值给a |
-
注意: 扩展的赋值运算符隐含了强制类型转换
-
对数据进行条件判断的符号,最终会返回一个比较的布尔结果(false , true)
| 符号 | 说明 |
|---|---|
| == | 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 |
| <= | a<=b, 判断a是否小于等于b,成立为true ,不成立为false |
-
注意:在做相等判断时,千万不能把 == 误写成 =
= 表示赋值 == 表示判断是否相等逻辑运算符
-
可以把多个条件的布尔结果放在一起运算,最终返回一个布尔结果
| 符号 | 介绍 | 说明 |
|---|---|---|
| & | 逻辑与 | 必须都是true,结果才是true;只要有一个是false ,结果一定是false |
| | | 逻辑或 | 只要有一个为true,结果就为true |
| ! | 逻辑非 | 你真我假,你假我真, !true = false , !false = true |
| ^ | 逻辑异或 | 如果两个条件都是false 或者都是true 则结果都是false,两个条件不同结果是true |
double size = 9.8; double s = 16; // 逻辑与 // 需求:尺寸大于6.95,内存大于8gb System.out.println(s >= 6.95 & size >= 8); // true // 逻辑或 // 需求:要么内存大于32,要么尺寸大于6.95 System.out.println(s >= 6.95 | size >= 32); // true // 逻辑非 System.out.println(!true); // false System.out.println(!false); // true // 逻辑异或 System.out.println(false ^ true); // true System.out.println(false ^ false); // false短路逻辑运算符
| 符号 | 介绍 | 说明 |
|---|---|---|
| && | 短路与 | 判断结果与 “ & ”一样 ,过程是左边是false ,右边则不执行 |
| || | 短路或 | 判断结果与 “ | ”一样,过程是左边为true,右边则不执行 |
-
注意: 逻辑与 “ & ” , 逻辑或 “ | ” : 无论左边是false 还是 true ,右边都要执行
// && & || | 区别 int a = 10; int b = 20; System.out.println(a > 100 && ++b > 10); // false System.out.println(b); // 结果还是20,因为左边判断为false,右边则不执行 System.out.println(a > 100 & ++b > 10); // false System.out.println(b); // 结果为21, 因为 & 两边都要执行 int i = 10; int j = 20; System.out.println(i > 2 || ++j>10); // true System.out.println(j); // 20 因为左边判断为true 右边则不判断 System.out.println(i > 2 | ++j>10); // true System.out.println(j); // 21 因为 | 两边都要执行三元运算符
-
格式:条件表达式 ? 值1 : 值2
-
执行流程:首先计算关系表达式的值,如果值为true ,返回值1,如果为false,返回值2
double score = 90; String s = score >= 60 ? "考试通过" : "挂了"; // 先计算 '?' 左边是否大于60, 如果大于60 返回 "考试通过", 如果小于返回 "挂了" System.out.println(s); // 考试通过
如何用三元运算符计算两个整数中的最大值呢?
int a = 200; int b = 300; int max = a > b ? a : b; // 因为a 小于 b 结果为false,所以结果为b System.out.println(max); // 300
那么如何用三元运算符计算三个整数中的最大值呢?
int num1 = 1090; int num2 = 450; int num3 = 30; int temp = num1 > num2 ? num1 : num2; // 先判断num1和num2哪个大,将大值赋值给变量temp int max = num3 > temp ? num3 : temp; // 之后再用num3与temp进行比较,最后得出最大值 System.out.println(max);
-
了解:用一行语句的三元运算符计算三个整数的最大值(三元运算符的嵌套)
int num1 = 1090; int num2 = 450; int num3 = 30; int max1 = num1 > num2 ? num1 > num3 ? num1 : num3 : num2 > num3 ? num2 : num3; // 上面是不是不是很好理解,如果这样写呢? int max1 = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3 ? num2 : num3); // 先判断num1 是否大于 num2 如果num1大于num2 则走 第一个分支 , 如果num1小于num2 则走第二个分支, // 然后第一个分支在比较num1,是否大于num3,大于则走第一个,小于则走第二个,第二个分支同理运算符优先级
-
在表达式中,哪个运算符先执行后执行是要看优先级的, 例如 “ *,/ ” 的优先级高于 “ +,- ”
| 优先级 | 运算符 |
|---|---|
| 1 | ( ) |
| 2 | ! , - , ++ , -- |
| 3 | * , / , % |
| 4 | + , - |
| 5 | << , >> , >>> |
| 6 | < , <= , > , >= , instanceof(关键字) |
| 7 | == , != |
| 8 | & |
| 9 | ^ |
| 10 | | |
| 11 | && |
| 12 | || |
| 13 | ? |
| 14 | = , += , -= , *= , /= , %= , &= |
import java.util.Scanner; // 导入Scanner坐标
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in); // 获取Scanner对象
System.out.println("请输入您的年龄:");
int age = in.nextInt(); // 通过对象调用他的方法,实现键盘录入,等待用户输入数据
System.out.println("您的年龄为:" + age); // 打印输出结果
System.out.println("请输入您的名称:");
String name = in.next(); // next()方法为 用户输入一串字符串,截取到空格之前
System.out.println("欢迎:" + name); // 打印结果
}
}
上面代码的运行结果为:
如果输入名称有空格:
如果想要读取一整行字符串,则可以用 in.nextLine();
String name = in.nextLine();
如果想要读取一个浮点数,则可以用in.nextDouble();
double d = in.nextDouble();总结
1.为什么要进行类型转换?
-
存在不同类型的变量赋值给其他类型的变量
2.自动类型转换是什么样的?
-
类型范围小的变量,可以直接赋值给类型范围大的变量
3.表达式的自动类型转换是什么样的?
-
小范围的类型会自动转换成大范围的类型运算
4.表达式的最终结果类型是由谁决定的?
-
最终类型由表达式中的最高类型决定
5.表达式的有哪些类型转换是需要注意的?
-
byte short char 是直接转换成int 类型参与运算的
6.算数运算符有哪些?
+ - * / %
7./ 需要注意什么?为什么?
-
如果两个整数做除法,其结果一定是整数,因为最高类型是整数
8.什么是强制类型转换?
-
可以强行将类型范围大 的变量,数据赋值给类型范围小的变量
-
数据类型 变量 = (数据类型)变量
9.强制类型转换有哪些需要注意的?
-
可能出现数据丢失
-
小数强制转换成整数是直接截断小数保留整数
10.+除了做基本数学运算,还有哪些功能?
-
与字符串做+运算时会被当成连接符,其结果还是字符串
-
能算则算,不能算就在一起
11.自增,自减运算符是什么,有什么作用?
-
++,-- 对当前变量值+1,-1
12.自增,自减运算符在变量前后有区别吗?
-
如果单独使用放在前后没有区别
-
非单独使用:在变量前,先进行变量自增/自减,在使用变量
-
非单独使用:在变量后,先使用变量,在进行变量自增/自减
13.赋值运算符有哪些?
-
= , += , -= , *= , /= , %=
14.作用是什么?
-
基本作用是赋值
-
+= 可以实现数据累加,把别人的数据加给自己
15.逻辑运算符有哪些,有什么特点?
-
逻辑与 “ & ” : 有一个为false,结果是false
-
短路与 “ && ”: 一个为false , 结果为false ,前一个为false,后一个条件不执行
-
逻辑或 “ | ” : 有一个为 true,结果为true
-
短路或 “ || ” : 一个为true,结果是true,前一个为true,后一个条件不执行
-
逻辑非 “ ! ”: !false = true , !true = false
-
逻辑异或 “ ^ ” : 相同为false,不同为true
-
注意:常用的逻辑运算符还是: && , || , !
链接:https://pan.baidu.com/s/1uonB6zg0T1Iwetwt3mCGKg?pwd=cyzz
提取码:cyzz



