类型转换
不同类型的数据转换
类型转换的分类
- 隐式转换
取值范围最小的数据,给取值范围最大的类型赋值,可以直接赋值
int a = 10
double b = a
输出结果为10.0
特别关注
byte short char 三种一起运算会统一成 int
-
强制转换
把一个表示数据范围大的数值或变量赋值给另一个表示范围小的变量
目标数据类型变量名 = (目标数据类型)值或变量;
public class demo{ public static void main(String[] args){ int a = 10; byte b = (byte)a; System.out.println(b); } }
会损失精度
double的12.3转换int为12
-
类型转换案例
byte a = 3;
byte b = 4
byte c = a + b
小的数据类型和大的数据类型在一起运算,小的会先提升为大的之后,在进行运算
byte short char 在运算时会提升为int,在进行运算
byte c = a + b;
这两个a和b为byte,会提升为int类型.
大的给小的属于强制转换.
解决方法:
byte c = (byte)(a+b); //提升算数优先级
byte d = 3 + 4
java常量优化机制:
会在编译时让3和4相加,然后判断是否在byte的取值范围
在范围内:通过
不在范围内:不通过,编译出错
运算符
-
运算符:对常量或变量进行操作的符号
-
表达式:用运算符把常量或变量连接起来符合Java语法 句子.不同运算符连接起来的表达式是不同类型的表达式
-
举例:
int a = 10;
int b = 20;
int c = a + b;
+:是运算符(算数运算符)
a+b:是表达式,由于+是算数运算符,所以这个表达式叫算数表达式
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | 正常 |
- | 减 | 正常 |
* | 乘 | 正常 |
/ | 除 | 正常(整数相除只能得到整数,要得到小数必须加入小数) |
% | 取余 | 获取两个数据做除法的余数 |
先乘除后加减
字符的+操作
- 运算过程
当(byte short char int)在一起运算时,都会提升为int之后在进行运算(取ASCII表)
ASCII表为字符到字节的对应关系
字 | 十进制 |
---|---|
a | 97 |
A | 65 |
0 | 48 |
字符串的+操作
System.out.println("ithema"+666);
结果为:ithema666
字符串可以用+ 和任意数据类型拼接
从左到右按个执行
System.out.pringln(1 + 99 + “年黑马”);结果为100年黑马
+为字符串
案例:数值拆分
- 需求:键盘录入一个三位数,将其拆分为个位/十位.百位,打印在控制台
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
int a = i % 10;
int b = i / 10 % 10;
int c = i / 100;
System.out.println("整数" + i +"个位数为:" + a)
System.out.println("整数" + i +"十位数为:" + b)
System.out.println("整数" + i +"百位数为:" + c)
公式总结:
个位:数值%10
十位:数值/10%10
百位:数值/10/10%10
…
##自增自减运算符
符号 | 作用 | 说明 |
---|---|---|
++ | 自增 | 变量的值+1 |
– | 自减 | 变量的值-1 |
可在变量前也可在变量后
a++ //a = a + 1
a-- //a = a - 1
- 单独使用时前后都可以
- 参与操作时:
在前:先对变量自增自减在赋值
在后:先将变量原本的值取出来参与操作,随后再进行自增自减
注意事项
- 单独使用时,++/–放在前后都一样.
- 参与操作时
-
- 在后边,先将原本的值取出来进行操作,随后自增自减
-
- 在前边,先进行自增自减,然后再参与操作
- 不能操作常量
赋值运算符
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | a = 10 ,将10赋值给变量a |
+= | 加后赋值 | a + = b,将a + b的值赋值给a |
-= | 减后赋值 | a - = b,将a - b的值赋值给a |
*= | 乘后赋值 | a * = b,将a * b的值赋值给a |
/= | 除后赋值 | a / = b,将a ÷ b的值赋值给a |
%= | 取余或赋值 | a % = b,将a ÷ b的余赋值给a |
扩展赋值运算符底层会自带强转功能
关系运算符(比较运算符)
符号 | 说明 |
---|---|
== | 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<b,判断a是否小于b,成立为true,不成立为false |
<= | a<=b,判断a是否小于等于吧,成立为true,不成立为flase |
返回值只有true和false
逻辑运算符
5<x<15
- 拆解为:x>5和x<15
- 合并后为x>5 &(并且) x<15
&(与):并且
遇false为false,只有都为true才为true
丨(或): 或者
条件只要有一个成立就成立,只有左右两边都是flase才为flase,有一个ture就为ture
!(取反)
一个变一次
^(异或)
只有左右两边不同为ture,同样则为flase
短路逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与 | 作用和&一样,但有短路效果 |
丨丨 | 短路或 | 作用和丨一样,但有短路效果 |
短路效果
确定后,后面的语句不执行
&&:当左边为flase时,右边不执行;
||:当左边为ture时,右边不执行.
三元运算符
- 格式
关系表达式?表达式1:表达式2;
执行流程:
首先计算关系表达式
如果值为ture,取表达式1
如果值为flase,去表达式2
案例:三个和尚
一座寺庙里住着三个和尚,已知他们的身高分别为150cm,210cm,165cm,请用程序实现获取这三个和尚的最高身高
public class SanGeHeShang{
public static void main(String[] args){
int a = 150;//第一个和尚的身高
int b = 210;//第二个和尚的身高
int c = 165;//第三个和尚的身高
int d = a > b ? a : b;//比较第一个和尚和第二个和尚的身高
int max = d > c ? d : c;//和第三个和尚比较,选出最高的和尚身高
System.out.println("三个和尚最高的身高为:" + max);//打印输出三个和尚最高的身高
}
}
分支语句
流程控制语句
- 顺序结构
- 分支结构(if,switch)
- 循环结构(for,while,do…while)
顺序结构
从上到下从左到右(默认的结构,依次执行)
if语句
- 格式
if(关系表达式){
语句体;
}
- 流程
- 首先计算关系表达式的值
- 如果关系表达式的值为ture就执行语句体
- 如果关系表达式的值为flase就不执行语句体
- 继续执行后面的语句内容
注意事项
如果if语句所控制的语句体,是一条语句,大括号可以省略不写(不建议)
if语句的小括号后边不要写分号
if(关系表达式){
语句体1;
}else{
语句体2;
}
- 流程
- 首先计算关系表达式的值
- 如果关系表达式的值为ture就执行语句体1
- 如果关系表达式的值为false就执行语句体2
- 继续执行后面的语句内容
if(判断条件1){
语句体1
}else if(判断条件2){
语句体2
}
...
...
else{
语句体n+1
}
- 流程
- 首先计算判断条件1的值
- 如果值为true就执行语句体1;如果值为false就计算判断条件2的值
- 如果值为true就执行语句体2;如果值为false就计算判断条件3的值
- …
- 如果没有任何判断条件,就执行语句体n+1
案例:考试奖励
键盘录入学生考试成绩,更具成绩程序给出不同的奖励
import java.util.Scanner;//导包
public class KaoShi{
public static void main(String[] args){
//创建对象
Scanner sc = new Scanner(System.in);
//控制台提示语句
System.out.print("请输入学生的成绩");
//调用Scanner对象,接收数据
int score = sc.nextInt();
//进行比较
if(score >= 95 && score <= 100){//判断是否95-100之间
System.out.print("奖励自行车");
}else if(score >=90 && score <= 94){//判断是否90-94之间
System.out.print("游乐场");
}else if(score >=80 && score <= 89){//判断是否80-89之间
System.out.print("变形金刚玩具");
}else{//其他情况
System.out.print("挨顿打");
}
}
}