java运算符
运算符:用来指明操作数的运算方式
按照操作数的数目来分类
单目运算符 a++
双目运算符 a+b
三目运算符 (a>b)? x : y
按运算符的功能来分类
算数运算符
+ - * / %(取余 求模)
++(自增) --(自减)
int x=1;
int y=x++;//++在后 先赋值 再自增(先进行计算 后赋值)
x++//x=x+1//将x变量空间的内容 先取出 从常量区取出1 进行计算 再次存到x中
想要做值交换的时候 会产生一个临时的副本空间(备份)
++在变量的前面 先自增后备份 ++在变量的后面 先备份后自增 并将副本空间(备份)内的值赋给别人
x=2 y=1
例:int a = 1;
for(int i=0;1<100;i++){
a=a++;
}
a=1 //因为赋值的永远是备份空间的1
--------------------------------------------------------------
int m = 1;//210
int n = 2;//321
int sum = m++ + ++n - n-- - --m + n-- - --m;
m=0 n= 1 sum=2
----------------------------------------------------------------
赋值运算符
= 赋值符号 将=右边的值()
关系运算符(比较)
> < >= <= != ==
逻辑运算符
& | ^ ! &&短路与 || // ^逻辑异或 只要两个表达式结果不同 最终结果就是true
位(bit)运算
&按位与 |按位或 ^按位异或 ~ 按位取反<<按位左移位 >>按位右移位 >>>按位右移(无符号)
笔试题
&和&&的区别
&可以视为逻辑运算 也可以视为位运算 &&只能当做逻辑运算来用
如果两个都当做逻辑运算符来用 区别如下
&前后两个条件都是true 最终结果就是true
&& 短路与正常情况下&的执行结果一致
当前面条件为flase的时候发生短路最终结果flase
最有效率的方式计算2*8的结果
00000001 2 << 3相当于2乘以2的3次幂
* 00001000 00000010
------------- 00010000 == 16
00000010000==16
两个变量 int a = 1; b = 2如果将两个变量的值互换
int a = 1;
int b = 2;
方式一 采用一个中间变量
int c = a;
a = b;
b =c;
好处容易理解 值不会出问题 不好在于会产生一个新的存储空间
方式二
a = a+b;
b = a-b;
a = a-b;
好处省略了一个存储空间,不好在于+值可能产生越界
方法三
a = a^b;
b = a^b;
a = a^b;
学的就是高难度~