运算符
在java中我们将运算符分为六个大类:算数运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符
- 算数运算符:
加法运算(+):需要区分两个方面:1.如果+号的两边都是数字的话,那么这个+表示的数学上的加法 2.如果+号的两边,只有有一个字符串,那么这个+表示的是字符串连接符
通过下面这段代码加以区分:
class Test{
public static void main(String[] args){
System.out.println(2+3);
System.out.println("我爱"+"Java");
}
}
输出:5 我爱Java
减法运算(-)/乘法运算(*) :表示数学上的减法和*=乘法,无特殊含义。例如:System.out.println(10-2*5);//输出0
除法运算(/):也表示数学上的除法,但是需要注意!!如果两边都是整数 结果就是整数(整除),如果两边至少存在一个小数,计算结果就是小数
取余运算(%): 可理解为整除后得到的余数为计算结果。
自加运算(++) :细分为两类:前++ 和 后++,前者本身直接+1再参与运算,后者先参与运算再本身+1。前者由于比较难理解,通过一个图说明。
自减运算(--) :与自加运算同理。
通过一段代码来解释:
class Test{
public static void main(String[] args){
int i=3;
i++;
System.out.println(i); //i++并没有被输出即临时存储区的值未被调用,此时输出i变为了4
System.out.println(i++);//i++直接被输出即临时存储区的值被调用,输出4,i此时变为5
int j=i++;//此时i是5,i++赋值给j,则临时存储区的值被调用,j=5,i变为6
System.out.println(j); //输出5
System.out.println(i); //输出6
i=i++;//i++赋值给j,则临时存储区的值被调用,i=6
System.out.println(i); //输出6
i=i++;//同理,i=6
System.out.println(i); //输出6
//由于临时存储区的值一直被调用,则无论有多少个i=i++;,i的值都为为6,除非进行其他操作
i=1;
j= i++ + ++i + ++i + i++;//第一个i++ 参与运算值为1,i变为2 ,第二个 ++i,直接+1值为3,第三个同理值为4,第四个直接被调用值为4 ,i变为5
// 1 3 4 4
System.out.println(j);
System.out.println(i); //此时值变为5
}
}
输出:4 4 5 6 6 6 12 5
- 赋值运算符
赋值运算符中有+= ,-=,/=,*=,/=,%=,=,前六种都是通过与自身进行+-*/运算再将值赋给自身
注意:
short s=3;
//s=s+3;不兼容的类型: 从int转换到short可能会有损失
s+=3;//不会报错,因为他是将值直接赋值给自身
System.out.println(s);
- 比较运算符
有> < >= <= == != ,六种运算符,是用来比较两个值的,用运算符比较两个值时,结果是一个逻辑值,不是 ture(成立) 就是 false(不成立)的运算符号。
注意:不管是在基本数据类型还是在面向对象中 ==永远比的是两个变量(常量)当中所存储的那个数据的地址!
常量在常量池中的地址;对象在堆内存中的地址
- 逻辑运算符
单与(&)和双与(&&)同真则真,遇假则假,两者区别是单与必须两边都运算,双与左边一旦为假,右边无论真假,结果都是假,所以右边可以不运行。
单或(|)双或(||)有真则真,同假则假。两者的区别是单或必须两边都运算,双或左边一旦为真,右边无论真假,结果都是真,所以右边可以不运行
非(!):非真就是假,非假就是真
异或(^):相同为假,不同为真
它们的运算结果都是一个boolean类型。
- 位运算符
位运算符是二进制之间的运算。
&,各位比较,同1则1,遇0则0
|,各位比较, 有1则1,同0则0
^,各位比较,不同为1 相同为0
>> ,后面跟整数,向右移位,移动后与原位置比较,未在原位置则删除
<<,后面跟整数,向左移位,移动后与原位置比较,未在原位置则删除
class Test{
public static void main(String[] args){
int m=7;
int n=11;
System.out.println(m&n); //3
/*
0111
1011
&0011 3
*/
System.out.println(m|n); //15
/*
0111
1011
|1111 15
*/
System.out.println(m^n); //12
/*异或:不同为真 相同为假
0111
1011
^1100 12
*/
System.out.println(m>>2); //1
/*
0111
01 11
*/
System.out.println(m<<2); //28
/*
0111
011100
*/
System.out.println(0b10010101>>3);
//10010
System.out.println(0b10010101<<3);
//10010101000
//x>>y x/2^y
}
}
- 三目运算符
形式: 变量=布尔表达式(条件表达式) ? 值1 : 值2;
如果布尔表达式的结果是true,则将值1赋予变量,如果布尔表达式的结果是false,则将值2赋予变量
class Test05{
public static void main(String[] args){
int a=5;
int b=6;
int min=a>b?b:a;//表达式值为假,则是后者a的值
System.out.print(min);
}
}