一、算术运算符
算术运算符中+,-,*,/,%属于二元运算符,二元运算符指的是需要两个操作数才能完成运算的运算符。其中的%是取模运算符,就是我们常说的求余数操作。
1、整数运算:
如果两个操作数有一个为Long, 则结果也为long。
没有long时,结果为int。即使操作数全为short,byte,结果也是int。
2、浮点运算:
如果两个操作数有一个为double,则结果为double。
只有两个操作数都是float,则结果才为float。
3、取模运算:
- 1、其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同,如:7%3=1,-7%3=-1,7%-3=1。
- 2、浮点数据取余时的结果是余数加上小数部分,例:50.5%5=0.5。
- 3、自增自减运算:
算术运算符中++,–属于一元运算符,该类运算符只需要一个操作数。
示例:
public class Test{
public static void main(String args[]){
int a=1;
int b=a++;
System.out.println("a="+a+"\nb="+b);
int d=3;
int c=d--;
System/out.println("d="+d+"\nc="+c);
//d先复制3将3复制给c后在执行减1操作最后d为2
}
}
结果:
a=2
b=1
d=2
c=3
4、赋值及其扩展运算符
a+=b 等于 a=a+b 其他一样(+=,-=,*=,/=,%=)
二、关系运算符
1:=是赋值运算符,而真正的判断两个操作数是否相等的运算符是==。
2:==、!= 是所有(基本和引用)数据类型都可以使用
3:> 、>=、 <、 <= 仅针对数值类型(byte/short/int/long, float/double。以及char)
三、逻辑运算符
短路与和短路或采用短路的方式。从左到右计算,如果只通过运算符左边的操作数就能够确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,提高效率。
四、位运算符
1、左移和右移运算:左移一位相当于*2;右移一位相当于/2.
int a1=3*2*2;
int a2=3<<2;//相当于a1
int a3=12/2/2;
int a4=12>>2;//相当于a4
2、位运算:将数据转化为2进制的数据,然后进行按位逻辑操作。
五、字符串连接符
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,则该“+”为字符串连接符。
六、条件运算符(二目运算符)
格式: x ? y : z
当满足条件时,取y得值;不满足时取z的值。
示例:
int score =80;
String type=score<60?"不及格":"及格";
System.out.println("type= "+type);
输出结果:
及格
七、运算符的优先级
逻辑与、逻辑或、逻辑非的优先级一定要熟悉!(逻辑非>逻辑与>逻辑或)
八、强制类型转化与自动类型转化
1、自动类型转化:只要不超过该类型的范围即可;(由容量小的向容量大的转化)
2、强制类型转化:强制将数据转化为所需的类型,可能会造成数据的精度丢失。
注意:不能在布尔类型和任何数值类型之间做强制类型转换
3、溢出现象:要先将精度提升后在进行运算。
int money = 1000000000; //10亿
int years = 20;
//返回的total是负数,超过了int的范围
int total = money*years;
System.out.println("total="+total);
//返回的total仍然是负数。默认是int,因此结果会转成int值,再转成long。但是已经发生了数据丢失
long total1 = money*years;
System.out.println("total1="+total1);
//返回的total2正确:先将一个因子变成long,整个表达式发生提升。全部用long来计算。
long total2 = money*((long)years);
System.out.println("total2="+total2);