【Java】2.7运算符

本文详细介绍了Java中的各种运算符,包括算术运算符(如+、-、*、/、%),赋值运算符(如=、+=、-=等),关系运算符(如==、!=、>、<等),逻辑运算符(如&&、||、!),位运算符(如&、|、^、~、<<、>>等)以及条件运算符(三元运算符)。文章还特别强调了运算符的优先级和位运算的高效用法,并提供了实例代码进行演示。
摘要由CSDN通过智能技术生成

运算符分类

算数运算符

一元运算符

++、--

二元运算符

+、-、*、/、%

赋值运算符

=

扩展运算符

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

关系运算符

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

逻辑运算符

&&、||、!、^

位运算符

&、|、^、~、>>、<<、>>>

条件运算符

三元运算符

?:

字符串连接符

+

2.7.1算数运算符

二元运算符的运算规则:

整数运算:

  • 如果两个操作数有一个long,则结果也为long。

  • 没有long时,结果为int。即使操作数全为short、byte,结果也是int。

浮点运算:

  • 如果两个操作数有一个为double,则结果为double。

  • 只有两个操作数是float,结果才是float。

取模运算:

其操作数可以为浮点数,一般使用整数,结果是"余数"。"余数"符号和左边操作数相同,例如7%3=1,-7%3=-1,7%-3=1。

        //一元运算符++与--
        int a = 3;
        int b = a++;  //执行完后,b=3。先给b赋值,在自增
        System.out.println("a="+a+"\nb="+b); // a=4   b=3
        a = 3;
        b = ++a;     //执行完后,b=4。a先自增,再给b赋值
        System.out.println("a="+a+"\nb="+b);//a=4  b=4

2.7.2赋值及其扩展赋值运算符

运算符用法举例等效的表达式
+=a += ba = a + b
-=a -= ba = a - b
*=a *= ba = a * b
/=a /= ba = a / b
%=a %= ba = a % b

2.7.3关系运算符

关系运算符用来进行比较运算,关系运算符的结果是布尔值true或false。

运算符含义示例
==等于a==b
!=不等于a!=b
>大于a>b
<小于a<b
>=大于或等于a>=b
<=小于或等于a<=b

注意


  • =是赋值运算符,而真正判断两个操作数是否相等的运算符是==。

  • ==、!=运算符是所有(基本和引用)数据类型都可以使用的。

  • >、>=、<、<=运算符仅针对数值类型(byte/short/int/long,float/double以及char)可以使用


2.7.4逻辑运算符

Java中的逻辑运算符如下表所示。逻辑运算的操作数和运算结果都是布尔值。

运算符

说明

逻辑与

&(与)

两个操作数为true,结果才是true,否则是false

逻辑或

|(或)

两个操作数有一个是true,结果就是true

短路与

&&(与)

只要有一个为false,则直接返回false

短路或

||(或)

只要有一个为true,则直接返回true

逻辑非

!(非)

取反,即!false为true,!true为false

逻辑异或

^(异或)

相同时为false,不同时为true

        短路与和短路或采用短路的方式是指,从左到右计算,如果只通过运算符左边的操作数就能够确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,以提高效率。

/**
 * 短路与和逻辑与
 */
public class Test05 {
    public static void main(String[] args) {
        //&&:只要有一个为false,则直接返回false
        // 1 > 2 的结果为false,那么整个表达式的结果即为false,而不再计算2>(3/0)
        boolean c = 1 >2 && 2 >(3/0);
        System.out.println(c);
        //&:两个操作数为true,结果才是true,否则是false
        // 1 > 2 的结果为false,那么整个表达式的结果即为false,还要计算2>(3/0),0不能做除数,会输出异常信息
        boolean d = 1 >2 & 2 > (3/0);
        System.out.println(d);
    }
}

2.7.5位运算符

位运算指的是进行二进制位的运算,常用的位运算符如表所示

运算符说明
~取反
&按位与
|按位或
^按位异或
<<左移运算符,左移1位相当于乘2
>>右移运算符,右移1位相当于除2取商
/**
 * 位运算符 及其 面试题
 */

public class Test06 {
    public static void main(String[] args) {
        /**
         * A =   0011   1100
         * B =   0000   1101
         * -----------------------
         * A&B = 0000   1100
         * A|B = 0011   1101
         * A^B = 0011   0001  //A与B对应位相同则为0,不同则为1
         * ~B  = 1111   0010
         */
        //-------------------------
        /*效率极高!!!
        <<左移运算符,左移1位相当于乘2
        >>右移运算符,右移1位相当于除2取商
        
        //二进制位的运算
        0000 0000       0
        0000 0001       1
        0000 0010       2
        0000 0011       3
        0000 0100       4
        0000 1000       8
        0001 0000       16
         */
        System.out.println(2<<3);  //2*2*2*2=16
        System.out.println(3<<2);  //3*2*2=12
        System.out.println(5>>1);   //5/2=2
        System.out.println(5>>2);  //5/2/2=1
        System.out.println(5>>3);  //5/2/2/2=0
        
    }
}

注意


  • &和|既是逻辑运算符,也是位运算符。如果两侧操作数都是boolean类型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符。

  • 不要把“^”当作数学运算“乘方”,而是“位的异或”操作。


2.7.6字符串连接符

"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统就会自动将另一个操作数转换为字符串然后再进行连接。

        int a = 10;
        int b = 20;
        System.out.println(""+a+b); //1020
        System.out.println(a+b+""); //30

2.7.7条件运算符

条件运算符的语法格式为:

x ? y : z

其中,x为boolean类型表达式,运算时先计算x的值,若为true,怎整个运算符的结果为表达式y的值,否则整个运算结果为表达式z的值。

        //=================三目条件运算符=================
        //   x ? y : z
        //如果x==true,则为y,否则为z
        int score = 80;
        int x = -80;
        String type = score > 60 ? "及格" : "不及格";
        int flag = x > 0 ? 1 : (x==0 ? 0 : -1);
        System.out.println(type);  //及格
        System.out.println(flag);  //-1

2.7.8运算符优先级问题

优先级运算符结合性
1()括号运算符由左至右
2!、+(正号)、-(负号)一元运算符由左至右
2~位逻辑运算符由右至左
2++、--递增与递减运算符由右至左
3*、/、%算术运算符由左至右
4+、-算术运算符由左至右
5<<、>>位左移、右移运算符由左至右
6>、>=、<、<=关系运算符由左至右
7==、!=关系运算符由左至右
8&位运算符、逻辑运算符由左至右
9^位运算符、逻辑运算符由左至右
10|位运算符、逻辑运算符由左至右
11&&逻辑运算符由左至右
12||逻辑运算符由左至右
13?:条件运算符由右至左
14=、+=、-=、*=、/=、%=赋值运算符、扩展运算符由右至左

老鸟建议


逻辑与、逻辑或、逻辑非的优先级一定要熟记(逻辑非>逻辑与>逻辑或),如a||b&&c的运算结果是a||(b&&c),而不是(a||b)&&c。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值