【Java基础】7.算数运算符、关系运算符、位运算符、逻辑运算符、赋值运算符、三元运算符


前言

Java 语言中,可以把运算符分成以下几组:

  • 算术运算符
  • 关系运算符
  • 位运算符
  • 逻辑运算符
  • 赋值运算符
  • 其他运算符

一、算数运算符

算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。
算数运算符:+ 加、- 减、* 乘、/ 除、% 取余、++ 自增、-- 自减。
算数运算符
%取余:Java中,两个整数相除还是整数,并且是向下取整。
++ 自增、-- 自减分为前置自增自减(++a,–a)和后置自增自减(a++,a–)。
前置自增自减(++a,–a):先进行自增或者自减运算,再进行表达式运算。即先运算再用。
后置自增自减(a++,a–):先进行表达式运算,再进行自增或者自减运算。即先用在运算。

public class OperatorDemo1 {
    public static void main(String[] args) {
        // 算数运算符:+ 加、- 减、* 乘、/ 除、% 取余、++ 自增、-- 自减
        int a = 10;
        int b = 3;
        int c = 4;
        int d = 5;
        // + 加
        System.out.println("a + b = " + (a + b)); // a + b = 13
        // - 减
        System.out.println("a - b = " + (a - b)); // a - b = 7
        // * 乘
        System.out.println("a * b = " + (a * b)); // a * b = 30
        // / 除(Java中,两个整数相除还是整数,向下取整)
        System.out.println("b / c = " + (b / c)); // b / c = 0 (0.75 ==> 0)
        // % 取余
        System.out.println("a % b = " + (a % b)); // a % b = 1
        System.out.println("---后缀自增自减法(a++,a--)---");
        // a++ 后置自增,a-- 后置自减。先进行表达式运算,再进行自增或者自减运算。即先用在运算。
        System.out.println("a = " + a); // a = 10
        System.out.println("a++ = " + (a++)); // a++ = 10
        System.out.println("a = " + a); // a = 11
        System.out.println("b = " + b); // b = 3
        System.out.println("b-- = " + (b--)); // b-- = 3
        System.out.println("b = " + b); // b = 2
        System.out.println("---前缀自增自减法(++a,--a)---");
        // ++a 前置自增,--a 前置自减。先进行自增或者自减运算,再进行表达式运算。即先运算再用。
        System.out.println("c = " + c); // c = 4
        System.out.println("++c = " + (++c)); // ++c = 5
        System.out.println("c = " + c); // c = 5
        System.out.println("d = " + d); // d = 5
        System.out.println("--d = " + (--d)); // --d = 4
        System.out.println("d = " + d); // d = 4
    }
}

二、关系运算符

下表为Java支持的关系运算符。
关系运算符

public class OperatorDemo6 {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        // ==
        boolean rs = a == b;
        System.out.println("a == b = " + rs); // a == b = true
        // ==
        System.out.println("a == b = " + (a == b)); // a == b = true
        // !=
        System.out.println("a != b = " + (a != b)); // a != b = false
        // >
        System.out.println("a > b = " + (a > b)); //  a > b = false
        // >=
        System.out.println("a >= b = " + (a >= b)); // a >= b = true
        // <
        System.out.println("a < b = " + (a < b)); // a < b = false
        // <=
        System.out.println("a <= b = " + (a <= b)); // a <= b = true

        int i = 10;
        int j = 5;
        System.out.println("i == j = " + (i == j)); // i == j = false
        System.out.println("i != j = " + (i != j)); // i != j = true
        System.out.println("i > j = " + (i > j)); // i > j = true
        System.out.println("i >= j = " + (i >= j)); // i >= j = true
        System.out.println("i < j = " + (i < j)); // i < j = false
        System.out.println("i <= j = " + (i <= j)); // i <= j = false
    }
}

三、位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下:

A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A= 1100 0011

下表列出了位运算符的基本运算,假设整数变量 A 的值为 60 和变量 B 的值为 13:
位运算符

public class OperatorDemo2 {
    public static void main(String[] args) {
        int a = 60; // 60 = 0011 1100
        int b = 13; // 13 = 0000 1101
        int c = 0;
        c = a & b; // 12 = 0000 1100
        System.out.println("a & b = " + c); // a & b = 12

        c = a | b; // 61 = 0011 1101
        System.out.println("a | b = " + c); // a | b = 61

        c = a ^ b; // 49 = 0011 0001
        System.out.println("a ^ b = " + c); // a ^ b = 49

        c = ~a; // -61 = 1100 0011
        System.out.println("~a = " + c); // ~a = -61

        c = a << 2; // 240 = 1111 0000
        System.out.println("a << 2 = " + c); // a << 2 = 240

        c = a >> 2; // 15 = 1111
        System.out.println("a >> 2  = " + c); // a >> 2  = 15

        c = a >>> 2; // 15 = 0000 1111
        System.out.println("a >>> 2 = " + c); // a >>> 2 = 15
    }
}

四、逻辑运算符

下表列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假。
逻辑运算符

public class OperatorDemo7 {
    public static void main(String[] args) {
        double d = 9.8;
        int i = 7;
        System.out.println("d >= 6.95 :" + (d >= 6.95)); // d >= 6.95 :true
        System.out.println("i >= 8 : " + (i >= 8)); // i >= 8 : false

        // 1.& 逻辑与
        // 注意:必须前后都是true,结果才是true
        System.out.println("& 逻辑与 : " + (d >= 6.95 & i >= 8)); // & 逻辑与 : false

        // 2.| 逻辑或
        // 注意:只要有一个是true,结果就一定是true
        System.out.println("| 逻辑或 : " + (d >= 6.95 | i >= 8)); // | 逻辑或 : true

        // 3.! 逻辑非
        System.out.println("!true : " + !true); // !true : false
        System.out.println("!false : " + !false); // !false : true

        // 4.逻辑异或:必须两个不同结果才是true
        System.out.println("false ^ true : " + (false ^ true)); // false ^ true : true
        System.out.println("true ^ false : " + (true ^ false)); // true ^ false : true
        System.out.println("true ^ true : " + (true ^ true)); // true ^ true : false
        System.out.println("false ^ false : " + (false ^ false)); // false ^ false : false

        System.out.println("----&&、&、||、|的区别----");
        int a = 10;
        int b = 20;
        System.out.println("----&& 短路与,左边false,右边不执行----");
        System.out.println("变量b : " + b); // 变量b : 20
        System.out.println(a > 100 && ++b > 10); // false
        System.out.println("变量b : " + b); // 变量b : 20

        int x = 10;
        int y = 20;
        System.out.println("----& 逻辑与,两边都执行----");
        System.out.println("变量y : " + y); // 变量y : 20
        System.out.println(x > 100 & ++y > 10); // false
        System.out.println("变量y : " + y); // 变量y : 21

        int k = 10;
        int l = 20;
        System.out.println("----|| 短路或,左边true,右边不执行----");
        System.out.println("变量l : " + l); // 变量l : 20
        System.out.println(k > 2 || ++l > 10); // true
        System.out.println("变量l : " + l); // 变量l : 20

        int o = 10;
        int p = 20;
        System.out.println("----| 逻辑或,两边都执行----");
        System.out.println("变量p : " + p); // 变量p : 20
        System.out.println(o > 2 | ++p > 10); // true
        System.out.println("变量p : " + p); // 变量p : 21
    }
}

五、赋值运算符

下面是Java语言支持的赋值运算符:
赋值运算符

public class OperatorDemo5 {
    public static void main(String[] args) {
        // = 基本赋值运算符
        // += 加后赋值
        // -= 减后赋值
        // *= 乘后赋值
        // /= 除后赋值
        // %= 取余后赋值

        int a = 10;
        int b = 20;
        int c = 0;
        // = 基本赋值运算符,把a的值给c,c = 20
        c = b;
        System.out.println("c = b = " + c); // c = b = 20
        // += 加后赋值,把c + a后的值给c,c = 20 + 10
        c += a;
        System.out.println("c += a  = " + c); // c += a  = 30
        // -= 减后赋值,把c - a后的值给c,c = 30 - 10
        c -= a;
        System.out.println("c -= a = " + c); // c -= a = 20
        // *= 乘后赋值,把c * a后的值给c,c = 20 * 10
        c *= a;
        System.out.println("c *= a = " + c); // c *= a = 200
        // /= 除后赋值,把c / a后的值给c,c = 200 / 10
        c /= a;
        System.out.println("c /= a = " + c); // c /= a = 20
        int d = 15;
        // %= 取余后赋值,把d/a取余后的值给d
        d %= a;
        System.out.println("d %= a  = " + d); // d %= a  = 5

        System.out.println("----位运算符+赋值运算符----");
        System.out.println("现在变量c的值 = " + c);
        c <<= 2;
        System.out.println("c <<= 2 = " + c); // c <<= 2 = 80
        c >>= 2;
        System.out.println("c >>= 2 = " + c); // c >>= 2 = 20
        c >>= 2;
        System.out.println("c >>= 2 = " + c); // c >>= 2 = 5
        c &= a;
        System.out.println("c &= a  = " + c); // c &= a  = 0
        c ^= a;
        System.out.println("c ^= a   = " + c); // c ^= a   = 10
        c |= a;
        System.out.println("c |= a   = " + c); // c |= a   = 10
    }
}

六、其他运算符

1.三元运算符

条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。
格式:条件表达式 ? 值1 : 值2,true为值1,false为值2。

public class OperatorDemo8 {
    public static void main(String[] args) {
        // 格式: 条件表达式 ? 值1 : 值2
        // variable x = (expression) ? value if true : value if false
        // true为值1,false为值2
        double score = 18;
        // 表达式score >= 60,是false,所以是值2,返回结果是String类型的rs
        String rs = score >= 60 ? "考试通过" : "挂科";
        System.out.println("rs = " + rs); // rs = 挂科

        System.out.println("----例子1:需要从2个整数中找出较大值----");
        int a = 10000;
        int b = 2000;
        // 返回结果是int类型的max
        int max = a > b ? a : b;
        System.out.println("max = " + max); // max = 10000

        System.out.println("----例子2:需要从3个整数中找出最大值----");
        int i = 10;
        int j = 30;
        int k = 50;
        // 1、找出2个整数的较大值
        int temp = i > j ? i : j;
        System.out.println("temp = " + temp); // temp = 30
        // 2、拿临时变量与第三个变量的值继续比较
        int rsMax = temp > k ? temp : k;
        System.out.println("rsMax = " + rsMax); // rsMax = 50

        System.out.println("----拓展知识----");
        int rs1 = i > j ? (i > k ? i : k) : (j > i ? j : i);
        int temp1 = i > k ? i : k;
        System.out.println("temp1 = " + temp1); // temp1 = 50
        int temp2 = j > i ? j : i;
        System.out.println("temp2 = " + temp2); // temp2 = 30
        int temp3 = i > j ? 50 : 30;
        System.out.println("temp3 = " + temp3); // temp3 = 30
        System.out.println("rs1 = " + rs1); // rs1 = 30
    }
}

2.instanceof 运算符

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
格式:( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。

public class Test1 {
    public static void main(String[] args) {
        // instanceof运算符严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例。
        // 格式:boolean result = obj instanceof Class;

        String name = "James";
        // 由于 name 是 String 类型,所以返回真
        boolean result = name instanceof String;
        System.out.println("变量name是否是String类型:" + result); // 变量name是否是String类型:true

        int a = 10;
        // 报错,因为a是基本数据类型,不是引用类型
        // C = a instanceof Integer;

        Integer b = 1; // 自动装箱
        boolean result2 = b instanceof Integer;
        System.out.println("变量b是否是Integer类型:" + result2); // 变量b是否是Integer类型:true
    }
}

七、运算符优先级

当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
运算符优先级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值