运算符是java语言中的重要组成部分,只要有数据操作就离不开运算符。下面总结一下java丰富的运算符。
什么是运算符
简单的说:就是把常量或变量连接的符号。一般参与运算使用。
一、运算符的分类
1、 算数运算符
正号:+ 负号:-
加号:+ 减号:- 乘号:* 除号:/ 取模:%
自增:++ 即自加1,可至于前或后, 如:++a(a先自增,在参加运算)a++(a先参与运算后,a再自增)
自减:-- 即自减1,可至于前或后, 如:--a(a先自减,在参加运算)a--(a先参与运算后,a再自减)
连接符号:+ 字符串相加 如:"He"+"llo" 结果给是"Hello"
注意:自增 自减 只能用于变量 不能用于常量 ++3,1--
<pre name="code" class="java">public class Temp {
public static void main(String[] args) {
// "%"的细节
System.out.println(5 %-4);//结果为1 模数不影响符号
System.out.println(-5% 4);//结果为-1 被模数为符号位
// "/"的细节
//对于"/"的整除和小数除是有区别的:整数之间做除法时,只保留整数部分舍去小数部分
System.out.println(150/100*100);//结果为100
System.out.println(150.0/100*100);//结果为150.0
// "+"的细节
// "+"除为字符串相加功能外,还能把非字符串转换为字符串
System.out.println("1+1="+1); //结果为1 因为1前面为连接符自动转换成了字符串与前面连接
System.out.println("1+1="+1+1);//结果为11 注这里不是数字11而是字符串11
}
}
2、 赋值运算符
=、+=、-=、*=、/=,%=
如:int x,y,z; x=y=4;
int a = 3; a+=4;相对于a=a+4,但和a=a+4有本质区别。
3、 比较运算符
运算符 运算 范例 结果
== 相等于 6==3 false
!= 不等于 6!=3 true
< 小于 6<3 false
> 大于 6>3 true
<= 小于等于 6<=3 false
>= 大于等于 6>=3 true
instanceof 检测是否是类对象 "java" instanceof String true
注1:比较运算符结果为boolean类型 值0和1。
注2:比较运算符"==" 不能写出"="。
4、 逻辑运算符
&与运算 |或运算 ^异或 !非运算
&&短路与运算 ||短路或
&运算规律
&运算的两边只要有一个是false,结果就是false
只有都为true,结果才是true
|运算规律
|运算的两边只有一个true,结果肯定是true.
只有两边都为false,结果是false.
^异或运算规律
^异或的两边结果如果相同,结果是false
两边的结果不同,结果就是true
public class Temp {
public static void main(String[] args) {
/**
* &&和&运算的结果是一样的。但是运算过程有点小区别。
* &: 无论左边的运算结果是什么,右边都参与运算。
* &&:当左边为false时,右边不参与运
*/
if ( 10!=10 & 10/0==0 ){
System.out.println("&"); //程序报错 两边都运行
}
if ( 10!=10 && 10/0==0){
System.out.println("短路&&");//没有报错 左边false 程序结束
}
/**
* ||和|运算的结果是一样的。但是运算过程有点小区别。
*
* |:无论左边的运算结果是什么,右边都参与运算。
* ||:当左边为true时,右边不参与运算的。
*/
if ( 10==10 | 10/0==0){
System.out.println("|"); //程序报错
}
if ( 10==10 || 10/0==0){
System.out.println("短路||"); //程序执行左边为true 右边不执行
}
}
}
5、位运算符
左移:<< 3 << 2 = 12 相当于 3*2*2=12
右移:>> 3 >> 1 = 1 相当于 3/2=1
无符号右移:>>> 3 >>> 1 = 1
与:& 6 & 3 = 2
或:| 6 | 3 =7
异或: ^ 6 ^ 3 =5
反码:~ ~6 = -7
<<:左移几位其实就是该数据乘以2的几次方。左移:可以完成2的次幂运算
>>:右移几位其实就是该数据除以2的几次幂。右移:对于高位出现的空位,原来高位是什么就用什么补这个空位
>>>:无符号右移:数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补。
^: 一个数异或同一个数两次,结果不变
public class Temp {
public static void main(String[] args) {
/**
* 对连个整数整数变量的值进行互换(不用第三方变量)
*/
//一般方法 第三方变量
int a =3,b=5,c;
c = a;
a = b;
b = c;
//不用第三方变量 但这方式两个整数的数值过大,
//会超出int范围,会强制转换。数据会变化。
a = a + b;//a = 3 + 5
b = a - b;//3 + 5 - 5 = 3
a = a - b;//3 + 5 - 3 = 5;
// 使用 异或 一个数异或同一个数两次,结果不变
a = a ^ b;
b = a ^ b; // a ^ b ^ b = a
a = a ^ b; // a ^ b ^ a = b
// 面试时用第三种 为了阅读性 使用第一种
}
}
6、 三元运算符
public class Temp {
public static void main(String[] args) {
/**
* 格式
* (条件表达式)?表达式1: 表达式2
* 如果条件为true,运算结果为表达式1
* 如果条件为false,运算结果为表达式2
*/
int x=1,y=2,c;
c = (x>y) ? x : y;
System.out.println(c);//打印2 条件为false 结果为表达式2
c = (true)? x : y;
System.out.println(c);//打印1 条件为true 结果为表达式1
}
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
二、运算符优先级
运算级别由高到低 从左向右运算
1级----- 方法调用:[ ] . ()
2级----- 一元运算符:! 、~ 、++、-- 、+、-;强制类型转换:( );创建:new
3级----- 二元运算符:*和 / 优于 + 和 -
4级----- 位运算:<<、>> 、>>>
5级----- 比较运算符:< 、> 、<= 、>= 、instanceof优于 ==、!=、
6级----- 逻辑运算符:&、|、^、!、&&、||
7级----- 三元运算符:? :
8级----- 算数运算符等: =、+=、-=、*=、/=、%=、&=、|=、 ^=、 <<=、>>= 、>>>=
三、转义字符
什么是转义字符:通过"\"来转变后面字母或符号的含义。如:\n表示换行
常用转义字符
\b:退格 \n:换行 \t:制表符,tab键
\\:
反斜杠
\r:回车 \':单引号 \":双引号
注:window系统中回车符由2个符号组成 \r\n
linux中回车符是\n