数据类型与运算符 - 运算符

返回目录

运算符

    • 运算符作用:计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操作变量。
    • 一元运算符 - 运算规则:
      • ++(自增)--(自减)
        int a = 1;
        int b = a++; //a先赋值给b,再自增
        System.out.prinln("a=" + a + "\nb=" + b); //此时输出 a=2,b=1
        int a = 1;
        int b = ++a; //a先自增,再赋值给b
        System.out.prinln("a=" + a + "\nb=" + b); //此时输出 a=2,b=2
        
    • 二元运算符 - 运算规则:
      • 整数运算
        • 如果两个操作数有一个为long,则结果也为long。
        • 没有long时,结果为int,即使操作数全为short,byte,结果也是int。
      • 浮点运算
        • 如果两个操作数有一个为double,则结果为double。
        • 只有两个操作数都是float,则结果才为float。
      • 取模运算
        • 其操作数一般是整数,也可以为浮点数,结果是“余数”,“余数”正负和取模运算符左边操作数相同,例如:7%3=1;-7%3=-1;7%-3=1。
      • instanceof运算符
        • 其操作数左边是对象,右边是类;当对象是右边类或子类所创建的对象时,返回true;否则返回false。
          public class Test {
            public static void main(String[] args) {
              Person p = new Person();
              System.out.println(p instanceof Person); //p是Person的对象,返回true
            }
          }
          class Person{}
    • 赋值运算符 - 运算规则:
      • 将赋值运算符右边的值赋给左边。
        int a = 3; //将3赋给变量a
        int b = a; //将a赋给变量b
        System.out.println("a=" + a + "\nb=" + b) //输出后 a=3,b=3
    • 扩展运算符 - 运算规则:
      • 将扩展运算符左边与右边进行 + - * / % 后赋值给左边。
        int a = 1;
        int b = 2;
        b+=a; //这里相当于 b=b+a,赋值后b=3
        b-=a; //这里相当于 b=b-a
        b*=a+3; //这里相当于 b=b*(a+3),先算a+3再算b*a,赋值后b=8
    • 关系运算符 - 运算规则:
      • 关系运算符用来进行比较运算,运算结果只有truefalse
        int a = 3;
        System.out.println(a==3); //这里会判断a是否等于3,如果是输出true
        System.out.println(a!=5); //这里会判断a是否不等于5,如果是输出true
        char b = 'a';
        char b2 = 'c';
        System.out.println(b<b2); //在这里char会被转为int类型来进行运算
        System.out.println((int)b); //可以利用强制转型查看对应的int数值
        

        ==!= 是所有(基本和引用)数据类型都可以使用
        >>=<<= 仅针对数值类型 byte/short/int/longfloat/doublechar

    • 逻辑运算符 - 运算规则:
      • 逻辑运算符用来对比布尔值(boolean),计算结果也是布尔值(ture/false)。
        boolean a = true;
        boolean b = false;
        System.out.println(a&b); //a和b有一个为false,则输出false
        System.out.println(a|b); //a和b有一个为true,则输出true
        System.out.println(!b); //单个值运算,取反,b为true输出false,b为false输出true
        System.out.println(a^b); //按断a和b是否相同,相同输出false,不同输出true
        System.out.println(1<3&&1>3); //为false,则输出false,从左到右计算,左边符合直接输出不计算右边,不符合则继续往后计算
        System.out.println(1<3||1>3); //为true,则输出true,从左到右计算,左边符合直接输出不计算右边,不符合则继续往后计算
    • 位运算符 - 运算规则:
      • 位运算指的是将值转为二进制进行二进制运算。
      • 运算符 &(与)|(或) 既是逻辑运算符,也是位运算符,如果两侧操作数都是布尔类型,就作为逻辑运算符;如果两侧的操作数是整数类型,就是位运算符。
        int a = 3; //数值3转为二进制是0011
        int b = 4; //数值4转为二进制是0100
        System.out.println(a&b); //将整数类型3和4转为二进制进行运算
      • 「按位与」两个操作数必须都为true,才能为true,否则为false
      • 「按位或」两个操作数只要有一个是true,结果就是true
      • 「按位异或」两个操作数相同为false,不同为true
      • 左移运算符右移运算符分别代表乘2除2
        int a = 100;
        System.out.println(a<<2); //位移2位,乘两次2,结果等于400 = (100*2)*2
        System.out.println(a>>2); //位移2位,乘两次2,结果等于25 = (100/2)/2
        
    • 字符串连接符 - 运算规则:
      • 运算符“+”两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接,此处“+”不作为算数运算符,而作为字符串连接符进行运算。
        int a = 12;
        System.out.prinln("a=" + a); //输出结果:a=12
    • 条件运算符 - 运算规则:
      • 条件运算符格式“x:y:z”,其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则运算结果为y,否则结果为 z 。
        int score = 80; //定义一个值
        String type  = score<60?"不及格":"及格"; //值score的值是否小于60,为true输出“不及格”,为false输出及格。
        System.out.prinln("最终成绩:" + type);
    • 运算符的优先级:
      • 建议使用括号运算符来组织表达式。
      • 切记,逻辑与/或/非的优先级是逻辑非>逻辑与>逻辑或,如:a||b&&c的运算结果是:a||(b&&c),而不是(a||b)&&c
        序号 运算符 说明 顺序
        1 () 括号运算符 由左至右
        2 !、+(正号)、-(负号) 一元运算符 由左至右
        2 ~ 位逻辑运算符 由右至左
        2 ++、-- 递增与递减运算符 由右至左
        3 *、/、% 算术运算符 由左至右
        4 +、- 算术运算符 由左至右
        5 <<、>> 位左移、右移运算符 由左至右
        6 >、>=、<、<= 关系运算符 由左至右
        7 ==、!= 关系运算符 由左至右
        8 & 位运算符、逻辑运算符 由左至右
        9 ^ 位运算符、逻辑运算符 由左至右
        10 | 位运算符、逻辑运算符 由左至右
        11 && 逻辑运算符 由左至右
        12 || 逻辑运算符 由左至右
        13 ? : 条件运算符 由右至左
        14 =、+=、-=、*=、/=、%= 赋值运算符、扩展运算符 由右至左