表达式
1.表达式
1.1.概念:
由常量、变量、运算符、括号()组成的一个**算式\,按照一定的运算规则计算出结果值.
1.2.括号可以提高运算的优先级
1.3.特点
- 1)计算出的结果值可以直接使用,也可以通过一个变量保存起来然后使用
- 2)表达式的结果值的类型取表达式中数据类型精度最高的类型
2.类型转换
2.1.自动转换
1)定义:小的数据类型转换大的数据类型【存储空间】
2)在Java中,boolean类型与所有其他7种类型都不能进行转换
3)byte与char 不能自动转换 char与short之间也不能自动转换,因为数据范围的问题
4)如果2个操作数(包括byte,short,char,int),都将会转换为int类型,且结果也为int(自动向上转型)
5)long float double只要两个操作数中—有一个为以上类型,[另一个就会被转换成相应类型],并且结果也为该类型
6)例子:
/*细节1
*如果2个操作数(包括byte,short,char,int),都将会转换为int类型,且结果也为int(自动 向上转型)
* */
byte b1 = 10;
byte b2 = 20;
int sum = b1+b2;//累加之后,类型自动提升int,左边要用int接受
char c = 'A';//65
//b1+b2
sum = b1+c;//c 变成编码值65 然后参与运算
System.out.println(sum);
/*long float double只要两个操作数中---有一个为以上类型,[另一个就会被转换成相应类型],并且结果也为该类型
*/
float ng = 10L;
int b = 55;
double ss = ng+b;
2.2.强制类型转换
-
1)定义:大数据类型转小数据类型[存储空间大小]
-
2)语法:数据类型 变量名 = (数据类型)值/变量名;//值可能是更高的类型
-
3)高转低会导致精度丢失,不同类型的强制转换,可能会导致精度的下降.
-
4)实际开发中:应该要知道被强制转换的数据,是在一个已知的范围;
-
5)例如:
int i1 = 10;
int i2 = 15;
float f = (float)((i1+i2)*1.2);
f = (i1 + i2)*(float)1.2;
3.运算符
3.1.算数运算符
加法(+)减法(-)乘法 (*) 除法(/) 取模(%)
特例
1)0.0/0.0 结果是NaN ,任何的NaN都不等于自己(面试题)
2)1.0/0.0 结果:Infinity,表示无穷大
3.2.自增自减运算符(难度)
自增 ++ 自减 –
1)自增自减只能够用于变量,不能用于常量
2)自增自减运算的优先级 比 算术运算符 高
3)i++ //++ 在右边,先赋值在++
4)++i //++ 在左边,先++在赋值
int i = 15;
i = i++;
System.out.println("i = i++的值:"+i);//15
i = ++i;
System.out.println("i = ++i的值:"+i);//16
3.3.赋值运算符
符号:= += -= *= /= %=
从右到左,把符号右边的值赋值到左边的变量中
i+= 50;//只能看成是这个样子 i = i+50; 常用 其他的符号和 += 用法类似
3.4.比较运算符
符号: == != > < >= <=
比较运算的结果是一个布尔类型的值(true 或false);
3.5.逻辑运算符
1)逻辑运算符符号:& | && || ^ !
2)用来连接布尔类型的两个值或表达式,最终结果也是布尔类型
3)应用于多个条件的组合判断。
4)规则
运算符 | 运算结果 |
---|---|
& | 两边都为true ,结果为true |
竖线 | 只要有一边为true,结果为true |
&& | 两边都为true ,结果为true |
双竖线 | 只要有一边为true,结果为true |
^ | 两边不一样,结果为true ,否则为false,举个例子打印一下 |
! | 逻辑非 |
5)&& 逻辑与 并且;两边同时为true,结果才为true;短路:前面为false了后面没有必要计算了。
6)|| 逻辑或 或者;只要一边、为true,结果就为true;短路:前面为true了后面没有必要计算
7)验证示例:
System.out.println(10 > 66 && 1/0 == 0);//短路行为,前面为false了,后面不计算了,所以没有报错
System.out.println(10 < 66 || 1/0 == 0);//短路行为,前面为true了,后面就不计算了,所以1/0没有报错。
3.6.位运算(了解)
1)计算机磁盘二进制位的运算,二进制数据的运算,首先需要将数据转换位二进制以后再进行运算
2)位运算符号:& | ^ ~ << >>> >>
3)<< : 向左位移动,例如1<<3 结果8
4)‘>>’: 向右位移动,例如8>>2
5)‘>>>’: 无符号向右移动
3.7.三目运算
由问号?及冒号:分割的三个表达式,组成的一个表达式如X ? Y : Z ;按照一定规则进行运算的式子,称为表达式;该表达式具有一个结果值:
X :布尔类型的值或者结果为布尔类型的表达式
Y Z :一般来说数据类型相同的值或者表达式
运算规则:
- X 为true,结果值是Y
- X为false,结果值是X
-X Y Z 都可以是表达式
示例:
int a =90;
int b =20;
int max = a > b ? a+10:b;
System.out.println(max);//100