(一) JavaSE基础语法 - 操作符

本文详细介绍了Java中的运算符,包括基本概念、优先级、分类以及各种运算符的用法。例如,算术运算符、逻辑运算符、比较运算符、赋值运算符、按位运算符和移位运算符,并通过实例演示了它们的使用。文章还强调了括号在解决优先级问题中的重要作用和短路逻辑在逻辑运算符中的应用。
摘要由CSDN通过智能技术生成

一、基本概念

1、介绍:

表达式由操作数与操作符组成,操作数可以是一个常量、变量或表达式,操作符用于指明操作数的操作方式。

比如:1 + 2,1 > 2 && true。

 
 
2、优先级:

优先级操作符简介结合性
1[ ].( )方法调用,属性获取从左向右
2!、~、 ++、 –一元运算符从右向左
3* 、/ 、%乘、除、取模(余数)从左向右
4+ 、 -加减法从左向右
5<<、 >>、 >>>左位移、右位移、无符号右移从左向右
6< 、<= 、>、 >=、 instanceof小于、小于等于、大于、大于等于, 对象类型判断是否属于同类型从左向右
7== 、!=是否相等,是否不等于。从左向右
8&按位与从左向右
9^按位异或从左向右
10|按位或从左向右
11&&短路与从左向右
12||短路或从左向右
13?:条件运算符从右向左
14=、 += 、-= 、*= 、/=、 %=、 &=、 |=、 ^=、 <、<= 、>、>= 、>>=混合赋值运算符从右向左

参考:https://www.sojson.com/operation/java.html

 
那么多似乎有点记不住,那么为表达式加括号()吧。

 
 

 

二、操作符分类

1、按作用的操作数个数分类:

一元操作符:操作的操作数为一个,比如:++、- -

二元操作符:操作的操作数为两个,比如:+、-、*、/

三元操作符:操作的操作数为三个,比如:三元表达式 int i = (2 > 1 ? 2 : 1)

 
 
2、具体功能分:

算数操作符:+、-、*、%、/、++、- -

逻辑操作符:&&、||

比较操作符:>、<、<=、>=。。。

按位操作符:&、| 、^、~

移位操作符:>>、<<、<<<

三元操作符:布尔表达式?表达式1:表达式2
 
 
 

三、操作符介绍

注意:对于byte、short、char在运算时会转换为int

 
1、算数操作符

+、-、*、/、%、++、- -

 
注意:

(1)、除了boolean,其他基本数据类型都可以进行这些操作。

(2)、除了++、- -外,其他算数操作符可以配置 =使用。

 
 
2、逻辑操作符

&&、||

 
注意:

(1)、左右两边均为布尔表达式。

(2)、会发生短路现象,即一旦通过判断左边的表达式,可以确定整个表达式,那么操作符右边的表达式就不会进行判断。

@Test
public void test1(){
   int i = 0;
   if(false && i++ > 0){
       //左侧表达式为false,&&操作,通过左侧已经可以判断整个表达式
   }

   System.out.println(i); //0

   --------------------------------------------
       
   int j = 0;

   if(true || j++ > 0){
       //左侧表达式为true, ||操作, 通过左侧已经可以判断整个表达式
   }
   System.out.println(j); //0

}

 
 
 
3、比较操作符

== 、 > 、>= 、< 、<= 、 !=

 
 
 
4、赋值操作符

=、+= 、-= 、 *= 、/= 、%= 、&= 、^= 、 |=

@Test
public void test2(){
   int i = 0;
   i += 1; //等价于 i = i + 1;
   System.out.println(i);
   
   //其他的类似
}

 
 
 
5、按位操作符

& 、 | 、 ^ (异或) 、~(取反)

 
 
介绍:

以上的操作符为位运算操作符,左右两侧可以是整数、字母、或者boolean表达式

@Test
public void test3(){
   System.out.println(~'a'); //-98
   System.out.println(3 ^ 2); //1
   System.out.println(true ^ false); //true
}

~:即按位取相反数

比如:字符a对应数字97,二进制为0000000000000000000000000001100001,~操作后为11111111111111111111111110011110,互补后(-(取反 + 1))即为-98

 
^:即相异1,相同为0(相异为true,相同为false)

比如:3^2,二进制为…0011 ^ …0010,异或操作后为…0001,即为1,负数也是类似的。

 
 
注意:

(1)、&、| 并没有短路现象,左右两边均会判断。

(2)、除 ~ 外,其他都可以配合 = 使用。

(3)、boolean表达式可以配合按位操作符使用,~除外(为了区别 !)。

@Test
public void test4(){

   System.out.println(~(2 > 1)); //报错
   

   int i = 0;
   System.out.println(i ^= 1);
   System.out.println(i &= 1);
   System.out.println(i |= 1);
   System.out.println(i ~= 1); //报错
}

 
 
 
6、移位操作符

<<(左移)、>>(右移)、>>>(无符号右移)

 
 
介绍:

<<(左移):即数字带符号向左移位,左边高位丢弃,右边低位补0。

>>(右移):即数字带符号右移,被移位的二进制最高位是0(即+),右移后,空缺位补0,最高位为1(即-),右移后,空缺位补1。

>>>(无符号右移):被移位的最高位无论是否是0或1,空缺位都用0补

 
说明:位数不够的,是由于前面的0省略掉了。比如:11 -》000000000000000000000000000000011

@Test
public void test1(){
   //<<
   System.out.println(Integer.toBinaryString(3)); //11
   System.out.println(Integer.toBinaryString(3<<1)); //110

   System.out.println(Integer.toBinaryString(-3));//11111111111111111111111111111101
  System.out.println(Integer.toBinaryString(-3<<1));//11111111111111111111111111111010

   //>>
   System.out.println(Integer.toBinaryString(3)); //11
   System.out.println(Integer.toBinaryString(3>>1)); //1

   System.out.println(Integer.toBinaryString(-3));//11111111111111111111111111111101
  System.out.println(Integer.toBinaryString(-3>>1));//11111111111111111111111111111110

   //>>>
   System.out.println(Integer.toBinaryString(3)); //11
   System.out.println(Integer.toBinaryString(3>>>1)); //1

   System.out.println(Integer.toBinaryString(-3));//11111111111111111111111111111101
 System.out.println(Integer.toBinaryString(-3>>>1));//01111111111111111111111111111110

}

 
 
 

7、三元操作符

boolean表达式 ? 表达式1:表达式2;

 
 
示例:

@Test
public void test1(){
   int i = 2 > 1 ? 2 : 1;
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值