java运算符(基础系列2)


更多内容资源,请关注微信公众号“浅谈Java基础”

运算符就是接受一个或多个参数,并生成一个新值。在java中,有以下几种运算符:

  •       算术运算符

  •       赋值运算符

  •       关系运算符

  •       逻辑运算符

  •       位运算符

  •       三目运算符



1
算术运算符


java的基本算术运算符与其他大多数程序设计语言是相同的。其中包括加号(+)、减号(-)、除号(/,整数除法会直接去掉结果的小数位,而不是得出四舍五入的圆整结果)、乘号()以及取模运算符(%,从整数除法中产生余数)。除此之外,还有一元加(+)减(-)运算符和自动递增(++)递减(–)运算符。


基本算术运算符举例

   int a = 12;
   int b = 24;
   System.out.println("加法运算:" + (a + b));//36
   System.out.println("减法运算:" + (a - b));//-12
   System.out.println("乘法运算:" + a b);//288
   System.out.println("除法运算:" + a / b);//0
   System.out.println("取模运算:" + a % b);//12


从上面可以看出,一元减号(-)和加号(+)与二元减号和加号都使用相同的符号。编译器会根据表达式的书写形式自动判断使用的是哪一种

   int a = 20;
   int b = 18;
   int x = -a;
   int y = a * (-b);//int y = a * -b;  两个是相等的,
                   //第二个有时看起来会有点糊涂。

一元减号用于转变数据的符号,说白了就是正负号。


自动递增递减(++)递减(–)运算符是两种不错的快捷运算,递增运算符“++”,意为“增加一个单位”;递减运算符“–”,意为“减少一个单位”。来个例子,假设a是一个int(整数)值,则表达式++a就等价于(a=a+1)。

这两种运算符有两种使用方式,称为“前缀式”和“后缀式”,前缀放在变量或表达式前面,(++a和–a)这种是先进行自身加或减运算,再给其他赋值;对于后缀式,(a–和a++)先给其他赋值,再进行自身运算。

   int a = 2;
   int b = 1;
   int c = --a; // 先自己做了一次自减运算,再将a的值给了c
   System.out.println(c);//1
   System.out.println(a);//1
   int d = b--; // 先将b的值给了d,然后再自己做了一次自减运算
   System.out.println(d);//1
   System.out.println(b);//0



2
赋值运算符


java中使用“=”作为赋值运算符,为变量指定变量值。

例如:int a=2; String=”aaa”;

另外,在进行赋值操作时,支持简写形式。

例如:x=x+2;可以简写为x+=2;

          x=x-2可以简写为x-=2

          x=x*2可以简写为x*=2

效果一样,写法不同。



3
关系运算符


关系运算符是判断两个常量或变量的大小,得出的结果是一个boolean类型的值,即true或false。

有以下六种关系运算符:

  1.   等于(==):表示两个数据是否相等,相等即为true,反之false,另外数据类型不相等,但数值相等也会为true;

  2. 不等于(!=):判断两个数据不相等,不相等为true,反之false;

  3. 大于(>):判断大于号左边的数是否大于右边的数,大于为true,反之false;

  4. 小于(<):判断小于号左边的数是否小于右边的数,小于为true,反之false;

  5. 大于等于(>=):判断大于等于号左边的数是否大于或等于右边的数,大于或等于为true,反之false;

  6. 小于等于(<=):判断小于等于号左边的数是否小于或等于右边的数,小于或等于为true,反之false;

   int a = 97;
   int b = 97;
   char ch = 'a';
   System.out.println(a == b);// true
   System.out.println(a == ch);// true
   System.out.println(a > b);// false
   System.out.println(a >= b);// true



4
逻辑运算符


逻辑运算符是比较两个布尔类型的值,最后得出的结果也是布尔类型的,即true或false。逻辑运算符有:与(&&)、或(||)、非(!)、异或(^)。

  • &&:当左右两个值都为true时,返回true,否则返回false

  • ||   :左右两个操作数,有一个为true即为true

  • ! :!true=false

  • ^   :只有当左右都为true或都为false时,返回false,其他的都返回true


   int a = 97;
   int b = 97;
   char ch = 'a';
   System.out.println(a == b && a == ch);// true
   System.out.println(a >= b ^ a <= b);// false
   System.out.println(a > b ^ a < b);//false
   System.out.println(a >= b || a > b);// true


另外:“短路问题”

           当单个&时左边无论真假,右面都会进行计算。(不短路)

           两个&&时,如果左边为真右边参与运算,左边为false,右边不再进行运算。(短路,潜在的性能提升)



5
位运算符


在使用位运算符时,必须先把数据转化为二进制,所以此运算符只适用于整数类型的数据。共有七种位运算符:

  1.  按位与(&):两个运算数的二进制数进行‘与’运算,如果两个二进制数相应的位都为1,则该位的结果值为1,否则为0。例如11111011&10111110,其结果为10111010

  2. 按位或(|):两个运算数的二进制数进行‘或’运算,如果两个二进制数相应的位都为0,则该位的结果值为0,否则为1。例如11111010|10111110,其结果为11111110

  3. 按位异或(^):两个运算数的二进制数进行‘异或’运算,如果两个二进制数相应的位相同,则该位的结果值为0,否则为1。例如11111011&10111110,其结果为01000101

  4. 按位取反(~):对一个二进制数进行按位取反,即0变1,1变0,~11001100,结果为00110011

  5. 左移运算符(<<):操作对象仍是二进制的“位”,按照运算符右边指定的位数将运算符左边的操作数向左移动,右边补0。例如4<<2,4的二进制数为00000100,左移两位得到00010000即为十进制数16。

    对于正数,左移就是把<<左边的数据乘2的移动次幂。

  6. “有符号”右移(>>):按照运算符右边指定的位数将运算符左边的操作数向右移动,有符号运算符使用“符号扩展”,若符号为正,在高位插入0,符号为负,在高位插入1。

    对于正数,就是把>>左边的数据除以2的移动次幂。10>>1结果为5

  7. 无符号右移(>>>):按照运算符右边指定的位数将运算符左边的操作数向右移动,移出的低位舍弃,高位补0。



6
三目运算符


三目运算符的表达式形式为:

boolean-exp ? value0 : value1

如果boolean-exp(布尔表达式)的结果为true,就计算value0,计算结果为运算符最终的值;如果boolean-exp(布尔表达式)的结果为false,就计算value1,计算结果为运算符最终的值。

与if-else语句比较,这个更简洁

   int a = 5;
   int b = 3;
   //三目运算符
   int max1 = (a > b) ? a : b;
   System.out.println(max1);//5
   //if-else语句
   int max2;
   if (a > b) {
     max2 = a;
   } else {
     max2 = b;
   }
   System.out.println(max2);//5

显而易见。


运算符优先级


1 分隔符 .  [ ]  ( )  ,  
2 单目运算符 ++  –  ~   !
3 乘除取模运算 *  /  %
4
加减运算符 +  -
5
位移运算符 <<  >>  >>>
6
关系运算符 <  <=  >=




猜你喜欢

转载自blog.csdn.net/qq_41177827/article/details/81264639