JavaSE基础 (五)

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;
学的就是高难度~