title: Java表达式,运算符
categories: Java
tags:
- Java
1. 表达式
1.1 表达式作用
为了按照一定的运算规则计算出结果值,结果值如何使用
- 结果值可以直接使用,也可以通过一个变量保存起来然后使用
- 表达式的结果值的类型 取表达式中操作数类型精度最高的类型
- 括号()可以提高表达式优先级
2. 数据类型转换
2.1 概念
将数据从一种格式或结构转换为另一种格式或结构的过程.
2.2 类型转换分类
2.2.1 自动转换
类型 | char | byte | short | int | long | float | double |
---|---|---|---|---|---|---|---|
字节数 | 1 | 2 | 2 | 4 | 8 | 4 | 8 |
范围 | -2^7~2^7-1 |
0~2^16-1 |
-2^15~15^7-1 |
-2^31~2^31-1 |
-2^63~2^63-1 |
-2^128~2^128-1 |
-2^1024~2^1024-1 |
注意事项:
在Java中,boolean类型与所有其他7种类型都不能进行转换;
其他 7种数据类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化;(short和char ,因值的范围不同,不能自动转换)
2.2.2 自动转换示例
//1.如果2个操作数(包括byte,short,char,int),都将会转换为int类型,且结果也为int(自动向上转型)
short s = 10;
int num =1;
int n = num+s;
System.out.println(n);
//2.long float double只要两个操作数中有一个为以上类型,另一个就会被转换成相应类型,并且结果也为该类型
int num = 10;
double d1 = 10.01;
double d2 =num+d1;
System.out.println(d2);
//3.char类型向更高长度类型(例如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换
char c ='A';
int num = 10;
int a = c+num;
System.out.println(a);
注意事项:
char型具有两个字节,其数值范围是0 ~ 2^16-1
short类型也具有两个字节,其值的范围是-2^15 ~ 2^15-1
byte取值范围为-128~127
,
char只有整数范围,因此char 不能和byte short 相互自动转换,byte不能自动提升到char,但可以自动提升到short类型。
int a = 129;
byte b = (byte)a;//编译器只看容器不看值
System.out.println(b);//结果为-127
//示例2:
byte b = 100;//可以自动转换
float f = 1.3;//不能自动转换
int a = 2147483647;
a = a+1;
System.out.println(a); // 结果为 -2147483648
2.2.3 强制转换
定义
大数据类型转小数据类型
语法
数据类型 变量名 =(数据类型)变量名;
int a = 123;
int b = 234;
float f1 = (float)((a*b)*1.2);
System.out.println(f1)
注意事项:
高转低会导致精度丢失,不同类型的强制转换,可能会导致精度的下降.
实际开发中:应该要知道被强制转换的数据,是在一个已知的范围;
byte b1=1;
byte b2=2;
byte b3=(byte)(b1+b2);
//byte,short,char在计算时首先转换为int,大容量(int)转换为小容量的类型(byte)时要加强制转换
//不报错
byte t = 127;
int a = 127;
//需要强制转换才不报错:编译器只看容器【只看类型】不看值
byte b = (byte)a;
// 结果为 127
System.out.println(b);
3. 运算符
3.1 算数运算符
+
-
*
/
%
3.2 自增自减运算符(important)
++
--
注意
- 自增自减只能用于变量,不能用于常量
- 自增自减运算的优先级比算术运算符高
//example:
int i = 3;
//把3赋值给变量i
i++;
//变量i增加1,i++=4
++i;
//变量i自增1,++i=5
3.3 赋值运算符
=
+=
-=
*=
/=
%=
//example:
int i=3;
i +=3;
// 表示从变量中加上3并重新赋值给变量
i -=3;
// 表示从变量中减去3并重新赋值给变量
i *=3;
//表示将变量乘以3并重新赋值给变量
i /=3;
//表示将变量除以3并重新赋值给变量
i%=3;
//表示将变量取模3并重新赋值给变量
short s = 3;
s += 2;
//存在隐式转换
short s = 3;
s = s+2;
//结果值是int,int不能自动转换为short
3.4 比较运算符
==
!=
>
<
>=
<=
比较运算符的结果是boolean类型
int sum1 = 1;
int sum2 = 2;
boolean b1 = sum1 == sum2;
System.out.println(b1);
//控制台输出false
3.5 位运算符
&
与运算符,运算符两边为1,结果为1,否则为0|
或运算符^
异或运算符,两边一致,为1,不一致为0.~
取反,1变成0,0变成1<<
向左移动,例如1<<3 结果为8>>
向右移动,例如8>>2 结果为1>>>
无符号向右移动
3.6 逻辑运算符
&
与: 两边都为true ,结果为true|
或: 只要有一边为true,结果为true&&
短路与: 两边都为true ,结果为true||
短路或: 只要有一边为true,结果为true^
异或: 两边不一样,结果为true,否则为false!
逻辑非
3.7 三目运算符
定义:
由问号?及冒号:分割的三个表达式,组成的一个表达式如X ? Y : Z
;按照一定规则进行运算的式子,称为表达式;该表达式具有一个结果值:
X
:布尔类型的值或者结果为布尔类型的表达式Y Z
:一般来说数据类型相同的值或者表达式
运算规则:
X
为true,就是 Y 的结果值 ( 冒号前面的表达式的值):也就是整个三目运算的结果值X
为false,就是Z的结果值 ( 冒号后面的表达式的值):也就是整个三目运算的结果值
int sum1 = 1;
int sum2 = 2;
int res1 = sum1==sum2?1:2;
System.out.println(res1);
4. 总结
重点:
运算符,自增自减,if结构
难点:
自增自减