自掘Java----③运算符

一 运算符和表达式

1.运算符

运算符(Operator)进行数据的运算,实现对数据的各种操作。
②使用运算符就必须要有运算对象。运算对象也称为操作数(Operand),可以是常量、变量、函数和其他表达式。
③根据所需运算对象(操作数)的个数,运算符又分为3类:
单目运算符(Unary Operator )(操作数的个数为1,如:取负值运算符等);
双目运算符(Binary Operator )(操作数的个数为2,如:加、减运算符等);
三目运算符(Ternary Operator)(操作数的个数为3,如:条件运算符)。

2. 表达式

表达式(Expression)由运算符运算对象组成。
②最简单的表达式可以只包括一个运算对象
 复杂的表达式可以是运算符运算对象的任意组合。
 根据运算规则,任何一个表达式都有一个确定的值,称为表达式的值

3. 运算符的优先级与结合性

  1. 当程序中出现一个包含有多个运算符的复杂表达式时,为了准确理解该表达式的语义,通常需要将其划分成若干简单的子表达式的组合,这就必须依靠运算符的两个重要属性:优先级(Precedence)和结合性(Associativity);
  2. Java语言将运算符分为14个优先级,级数越小的运算符优先级越高;
  3. 运算符结合性只有左结合右结合两种;
优先级运算符说明Java运算符
1括号()[]{}
2正负号+-
3单元运算符++--~
4乘法、除法、求余*/%
5加法、减法+-
6移位运算符<<>>>>>
7关系运算符<<=>=>instanceof
8等价运算符==!=
9按位与&
10按位异或^
11按位或|
12条件与&&
13条件或||
14三元运算符? :
15赋值运算符=+=-=*=/=%=
16位赋值运算符&=|=<<=>>=>>>=

二 Java运算符一览(增添了与C的对比)

Java语言运算符优先级表
优先级运算符名称或含义使用形式结合方向运算符类型
1[ ]数组元素下标数组名左到右/
()圆括号(表达式)/函数名(形参表)
.成员选择(对象)对象.成员名
删去了指针->
2-负号运算符-表达式右到左单目运算符
~按位取反运算符~表达式
++自增运算符++变量名/变量名++
--自减运算符--变量名/变量名--
*取值运算符*指针变量
&取地址运算符&变量名
!逻辑非运算符!表达式
(类型)强制类型转换(数据类型)表达式
sizeof长度运算符sizeof(表达式)
3*乘法表达式*表达式左到右双目算数运算符
/除法表达式/表达式
%整除求余(取模)整型表达式%整型表达式
4+加法表达式+表达式左到右双目算数运算符
-表达式-表达式
5<<左移位变量<<表达式左到右双目位运算符
>> 右移位变量>>表达式
6>大于表达式>表达式左到右双目关系运算符
>=大于等于表达式>=表达式
<小于表达式<表达式
<=小于等于表达式<=表达式
7==等于表达式==表达式左到右双目关系运算符
!=不等于表达式!= 表达式
8&按位与表达式&表达式左到右双目位运算符
9^按位异或表达式^表达式左到右
10|按位或表达式|表达式左到右
11&&逻辑与表达式&&表达式左到右双目逻辑运算符
12||逻辑或表达式||表达式左到右
13?:条件运算符表达式1?表达式2: 表达式3左到右三目运算符(唯一)
14=赋值运算符变量=表达式右到左双目运算符
+=加后赋值变量+=表达式算数复合赋值运算符
-=减后赋值变量-=表达式
*=乘后赋值变量*=表达式
/=除后赋值变量/=表达式
%=取模后赋值变量%=表达式
<<=左移后赋值变量<<=表达式位复合赋值运算符
>>=右移后赋值变量>>=表达式
&=按位与后赋值变量&=表达式
^=按位异或后赋值变量^=表达式
|=按位或后赋值变量|=表达式
15,逗号运算符表达式,表达式左到右顺序求值运算符

简记运算符优先级就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

三 Java运算符详解

3.1 算术运算符

  • 算术(Arithmetic)运算包括加、减、乘、除、求余、取负数等,分别使用运算符+-*/%-来表示

  • /除法运算符的两种含义:整数除实数除

    1. 当两个整数相除时,结果仍为整数,即只保留整数商,而舍去小数部分;
    2. 只要两个操作数中有一个是实数,/都表示实数除,得到的是真实的小数结果;

与C语言区别在于

在Java中+号的含义除了“加减乘除的加”、“正负的正”,还有充当连接符的作用。

public class HelloWorld {
    public static void main(String[] args){
        System.out.println(1+"abc");
    }
}
//输出1abc
  • 在Java中,针对byte类型和short类型的时候,当赋值运算符右侧存在变量时,均报错,而C正常运行
    即:当定义只要byte类型和short类型的时候,右边有一个是变量,就会编译报错
public class HelloWorld {
    public static void main(String[] args) {
        byte a=1;
        a=a+1;    //报错
        System.out.println(a);
    }
}

3.2 自增、自减运算符

变量自增(Increment)运算符++自减(Decrement)运算符--,其作用是使被操作的变量的值增加1或减少1。作用主要是提高程序的编译效率,也增加了程序的简洁性。

  • 是单目运算符,只需要一个操作数,而且操作数必须是变量。它们的优先级与其他单目运算符一样,高于所有双目运算符,且具有右结合性。

  • 既可以放在变量的前面,称为前++(Prefix Increment)和前- -(Prefix Decrement);也可以放在变量的后面,称为后++(Postix Increment)和后- -(Postix Decrement)结果不同。
    格式如下:

++<变量>--<变量><变量>++<变量>--
  • 前++、**前–**表示先对变量进行自增、自减1运算,再将变量更新后的值作为自增、自减表达式的值。后++、**后- -**表示先将变量原来的值作为自增、自减表达式的值,再对变量进行自增、自减1运算。

  • 只能操作变量,类似于(-b)--的格式是非法的。

  • 自增、自减运算符自带强制转换,即

byte a=1;
a++   //a=(byte)a+1

3.3 复合赋值运算符

Java语言还提供另一种形式的赋值运算符,称为复合赋值(Combined Assignment)运算符。它由双目运算符双目赋值运算符一起构成。包括+=-=*=/=%=
格式如下:

<变量><双目赋值运算符>=<表达式>
a*=a+1

上述语法等价于:

<变量>=<变量><双目运算符><表达式>
a=a*(a+1)

同样具有强制转换

byte a=1;
a+=1   //a=(byte)a+1

3.4 关系运算符

关系(Relational)运算是用来比较两个操作数的值的运算,比较的结果是一个逻辑值,即只能是“真”或“假”。若比较条件得到满足,则结果为真;否则,结果为假。C语言中关系运算共6种,包括:小于、小于或等于、大于、大于或等于、等于、不等于,分别使用运算符<>>===!=


与C语言区别在于

关系运算符得出来的结果一定是boolean类型的数据,也就是说要么是true,要么是false

3.5 逻辑运算符

  • 区分“&”和“&&”:

    • 相同点:如果符号左边是true,则二者都执行符号右边的操作

    • 不同点:& : 如果符号左边是false,则继续执行符号右边的操作

    ​ && :如果符号左边是false,则不再继续执行符号右边的操作

  • 区分“|”和“||”:

    • 相同点:如果符号左边是false,则二者都执行符号右边的操作

    • 不同点:| : 如果符号左边是true,则继续执行符号右边的操作

      ​ || :如果符号左边是true,则不再继续执行符号右边的操作

3.6 位运算符

位运算符的运算过程都是基于二进制的补码运算

在这里插入图片描述

3.6.1 左移 <<

  • 运算规则:在一定范围内,数据每向左移动一位,相当于原数据*2。(正数、负数都适用)

【注意】当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位

3<<4  类似于  3*24次幂 => 3*16 => 48
-3<<4  类似于  -3*24次幂 => -3*16 => -48

3.6.2 右移 >>

运算规则:在一定范围内,数据每向右移动一位,相当于原数据/2。(正数、负数都适用)

【注意】如果不能整除,向下取整

69>>4  类似于  69/24= 69/16 =4
-69>>4  类似于  -69/24= -69/16 = -5

3.6.3 无符号右移 >>>

运算规则:往右移动后,左边空出来的位直接补0。(正数、负数都适用)
相当于取正数

69>>>4  类似于  69/2的4次 = 69/16 =4
-69>>>4   结果:268435451

3.6.4 按位与 &

运算规则:对应位都是1才为1,否则为0。

9 & 7 = 1
-9 & 7 = 7

3.6.5 按位或 |

运算规则:对应位只要有1即为1,否则为0。

9 | 7  //结果: 15
-9 | 7 //结果: -9

3.6.6 按位异或 ^

运算规则:对应位一个为1一个为0,才为1,否则为0。

9 ^ 7  //结果为14
-9 ^ 7 //结果为-16

3.6.7 按位取反 ~

运算规则:对应位为1,则结果为0;对应位为0,则结果为1。

~9  //结果:-10
~-9  //结果:8

3.7 条件运算符

(条件表达式)? 表达式1:表达式2
  • 如果运算后的结果赋给新的变量,要求表达式1和表达式2为同种或兼容的类型
public static void main(String[] args) {
    int i = (1==2 ? 100 : 200);
    System.out.println(i);//200
    
    boolean marry = false;
	System.out.println(marry ? "已婚" : "未婚"  );
    
    double d1 = (m1 > m2)? 1 : 2.0;
	System.out.println(d1);
    
    int num = 12;
    System.out.println(num > 0? true : "num非正数");
}

四 Java运算符与C总结

4.1 算术运算符

①在Java中+号的含义除了“加减乘除的加”、“正负的正”,还有充当连接符的作用。
任意数据类型的数据与字符串相连接的时候,那个+号就是连接符。
②当定义只要byte类型和short类型的时候,右边有一个是变量,就会编译报错

4.2 关系运算符

关系运算符得出来的结果一定是boolean类型的数据,也就是说要么是true,要么是false

4.3 其它

自增、自减运算符、复合赋值运算符自带强制转换,对于byte类型和short类型不会编译报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值