Java 运算符
用来指明对于操作数的运算方式
按照操作数的数目来进行分类
单目 a++
双目 a+b
三目 (a>b)?x:y;
按照运算符的功能进行分类
算术运算符
+, -, *, /, %,++(自增), --(自减)
int a = 1;
b = a++; //b输出为1, ++在前,先自增后备份,++在变量后面,先备份再自增,会将副本空间内的值赋值给别人
int a = 1;
a = a++; // a输出为1,因为先备份了一个
a
′
a^{'}
a′=a, 然后a自增,所以原来的a变量空间的值变成了2,最后=号将副本空间
a
′
a^{'}
a′里的值赋值给a, 所以a的最后结果是1。
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int m=1;
System.out.println(m++);
m = m++;
System.out.println(m);
}
}
//输出
1
2
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int m = 1;
int n = 2;
int sum = m++ + ++n - n-- - --m + n-- - --m;
System.out.printf("m = %d n = %d sum = %d", m, n, sum);
}
}
//输出
m = 0 n = 1 sum = 2
赋值运算符
= 赋值符号,将=右边的内容(值,引用)存入=左边的变量空间内
+=, -+, *=, /=, %=,
关系运算符(比较):作为一个条件的判断
> >= < <= != == (对象instanceof类)
1.区分=和 == 区别
= 是赋值符号,将=后面的结果(值 引用)存入=左边的变量内
== 比较符号,比较前后的元素(值 引用)是否一致
2.比较运算符的最终结果是什么?
最后的结果是boolean类型,true false
逻辑运算符:判断多个条件
&逻辑与 |逻辑或 ^逻辑异或 !逻辑非
&&短路与 || 短路或
逻辑运算符前后连接的两个布尔型的结果,最终的结果也是布尔型
&逻辑与 可以理解为中文的“和”,&前后两个条件必须同时满足 最终才为true
|逻辑或 可以理解为中文的“或者”,|前后两个条件只要有一个满足最终就为true
^逻辑异或 前后两个结果不一致最终就为true
!逻辑非 将原来的结果取反
&&短路与
(3>4) && (3<2) 如果第一个条件为false时,最终肯定为false
1.短路什么情况下才会发生:当前面的值结果为false的时候会发生短路
2.短路究竟短路什么:短路的是&&之后所有计算结果
3.如果发生了短路情况,性能比&稍微好一点
4.&逻辑与和&&短路与从执行的最终结果来看没有任何区别
5.&&短路与不一定可以提高性能,只有当前面为false才会发生短路,才会提高性能
||短路或
(3>2) || (3>4) —> true || false —> true
如果当第一个条件为true,最终结果一定是true
位bit运算
&按位与 |按位或 ^按位异或 ~按位取反
<< 按位左位移 >>按位右位移 >>>按位右位移(无符号)
1.最有效率的方式计算 2*8的结果
2<<3相当于2乘以2的3次幂,
00000010 —>00010000 == 16
乘数刚好是2的次幂,就可以通过左移进行计算
2.两个变量int a=1;int b=2;如何将两个值进行交换(不采用额外的空间)
1)利用两个数的和,
int a=1;
int b=2;
a = a+b
b = a-b
a = a-b
缺点:在加和的过程中可能会出现越界
2)利用异或:A ^B ^B = A,一个数字异或同一个数字两次,值不会改变
a = a^b;
b = a^b;
a = a^b;