类型的转换
- 一般来说,在做位运算符时,大类型会自动把小类型转换为大类型
例子: String msg=""+1;//这里是字符串类型和整数型相加
msg="1";//结果为一个字符串类型的1
** 这里面通过一个空串与int类型相加因为字符串类型在这里是大类型所以结果把int强制转换为字符串类型**
- 自动类型转换:在相同类型使用位运算符做运算时,大盒子等于小类型的值
例子:
box='a';// 字符型结果为97;
double num=box;//结果为变量名的类型格式 97.0
**在参与运算时,大类型参与运算会报错,这是因为小类型强制转换为大类型的数据会造成一些数据丢失**
- 在扩展运算符中,数据在运算时会自动强制转换为变量名相同的类型值,后运算
扩展运算符: == += *= /=
- 轮转:当运算的结果超出了类型值,结果值会在数据范围表中轮转
例子: byte num=127;
num+=1;//结果为-128
演示:num=num+1;
理解:这是因为在扩展运算符中,jdk内置了一些代码的优化功能,在扩展运算中,内部会自动转换为相同类型的数据类型后运算
5.大类型参与运算,尽可能提前
例子:double total =1.0*money*12000000;
这是因为代码在运算时都是从左到右,拿到上一步的结果做下一步的运算,如果上一步的结果超出了类型的范围值,整个运算结果都为错
强制类型的转换
- 理解:小类型的盒子 =(小类型)大值 ,注:boolean类型除外
例子: boolean good=true;
int box=(int)good;//会报错,错误提示:不兼容的类型
**Java中boolean类型为1,没有c语言的真即是1 **
- 类型转换的作用范围:当涉及到类型转换,在运算时,结果会被强制转换为符合当前的数据类型
例子: (int)0.08888*100;//结果为0
(int)(0.08888*100)//结果为8
**()的作用:在这里表提升作用域的优先级作用,在一些方法内也可表方法的调用或者对象的创建**
关系运算符
种类:< > <= >= != == instanceof 返回的值都为boolean类型
instanceof:这里表一个变量是否在对象内,返回的值为boolean类型的值
注: boolean 类型的变量不能用与关系型运算符中也就是> < >= <=中
例子: int a=5,b=2;
a>=b;//返回值为true
重点:"aaa" instanceof String ; //这里是判断aaa是否在String类中,注String 赋值 都是在对String 对象赋值 ,变量名是类似于对象存储的是地址
逻辑运算符
&& || ! :只操作boolean类型
短路:前面的表达式能够确定整个表达式的结果
例子: 5<2&& 5/0>1
这里面不会报错是因为前面表达式已经为false,发生了短路,后面的表达式就不运行
短路与:且&& 当前一个表达式 的值为F,整个表达式的结果已经确定为F,后面表达式为了提升性能而不执行。在表达式中只要有一个判断结果为flase,整个表达式都为false
例子:T&&T ->T T&&F ->F F&&T->F F&&F->F
短路或:或|| 当前一个表达式的值为T,整个表达式的结果已经确定为T,后面表达式为了提升性能而不执行
例子:F||T->F T||F->T F||T ->F F||F->F
! F->T !T->F :非真即假
重点:两边的类型都必须为boolean类型,其他类型的都会报错
位运算符&:不会发生短路,表达式会全部执行
三目运算符
表达式:boolean?值为true 取1:false取值2
例子: int a=5,b=3;
int c = a>b?a:b;// 结果为a