运算符(operator)

发布于:2022-12-13 ⋅ 阅读:(702) ⋅ 点赞:(0)

计算机的基本用途就是执行数学运算,Java提供了一套丰富的运算符来操作变量。

算术运算符 

① +,-,*,/,% 属于二元运算符。% 是取模运算符,就是我们常说的求余数操作

② 算术运算符中 ++(自增),--(自减)属于一元运算符

二元运算符的运算规则: 

整数运算:

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

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

浮点运算:

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

②  只有两个操作数都是float,则结果才为float

取模运算:

①  其操作数可以为浮点数,一般使用整数,结果是"余数","余数"符号和左边操作数相同

②  如:7 % 3 = 1       -7 % 3 = -1      7 % -3 = 1

eg.算术运算符

/**
 *测试算术运算符的用法
 */

public class TestOperator01 {
    public static void main(String[] args){
        int a = 3;
        long b = 4;
        long c = a + b;
        System.out.println(c);

        double d = 3+3.14;
        int d2 = 32/3;   // 两个整数相除,直接保留结果的整数部分,没有四舍五入
        System.out.println(d);
        System.out.println(d2);

        //+,-,*,/
        //取余数
        int e = 10%3;  //取余操作,结果符号和左边操作数相同
        System.out.println(e);

        //测试自增、自减
        int g = 30;
        g++;   //相当于:g = g+1;
        g--;   //相当于:g = g-1;

        g=10;
        int h = g++;   //g++先赋值。后自增
        g=10;
        int i = ++g;    //++g先自增,后赋值

        System.out.println(h);
        System.out.println(i);
    }
}

执行结果:

 赋值及其扩展赋值运算符

 eg.测试扩展运算符

/**
 * 测试扩展运算符的用法
 */

public class TestOperator02 {
    public static void main(String[] args){
        int a = 3;
        int b = 4;
        a +=b;  //相当于: a = a+b
        System.out.println(a);

        a = 3;
        a *= b+3;  //相当于: a = a*(b+3)
        System.out.println(a);
    }
}

执行结果:

关系运算符 

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

 Note:

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

==  、!=  是所有(基本和引用)数据类型都可以使用

> >=<<= 仅针对数值类型(byte/short/int/long,float/double以及char

eg.测试关系运算符

/**
 * 测试关系运算符的用法
 */

public class TestOperator03 {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        boolean c = a > b;
        System.out.println(c);

        char d='h';
        //char值位于0~65536之间,可以通过(int)强制转型
        System.out.println((int) d);
        boolean e = d>100;
        System.out.println(e);
    }
}

执行结果:

 逻辑运算符

 逻辑运算符的操作数和运算符结果都是 boolean  值。

 

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

eg.测试逻辑运算符

/**
 * 测试逻辑运算符
 */
public class TestOperator04 {
    public static void main(String[] args){
        boolean b1 =true;
        boolean b2 =false;
        System.out.println(b1&b2);  //与:有一个false.结果:false
        System.out.println(b1|b2);  //或:有一个true. 结果:true
        System.out.println(!b2);  //取反
        System.out.println(b1^b2); //异或:相同为false,不同为true


        //短路与、短路或
          //int b3 = 3/0;    //会报不能除以0的异常
        boolean b3 = 1>2  &&  (4<3/0);
        System.out.println(b3);
    }
}

 执行结果:

 位运算符

 eg.测试位运算符

/**
 * 测试位运算符
 */
public class TestOperator05 {

    public static void main(String[] args){
        int a = 7;  //二进制 0111
        int b = 8;  //二进制 1000
        System.out.println(a&b);    //结果: 0
        System.out.println(a|b);    //结果: 15
        System.out.println(a^b);    //结果: 15
        System.out.println(~b);     //结果: -9

        //移位
        //乘以2,除以2.使用移位操作,最快!!
        int c = 5<<2;   //相当于:5*2*2
        System.out.println(c);
        System.out.println(40>>3);  //相当于40/8


    }
}

Note:

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

●  不要把  当作数学运算乘方,是位的异或操作。

字符串连接符

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

eg.测试字符串连接符

/**
 * 测试字符串连接符的用法
 */

public class TestOperator06 {
    public static void main(String[] args){
        String a = "3";
        int b = 4;
        System.out.println(a+b);  //结果是字符串34,不是数字34

        //条件是String, 不是char.若是char,则仍然是加法的意思
        char c1 = 'h';
        char c2 = 'i';
        System.out.println(c1+c2);
        System.out.println(""+c1+c2);  //通过加空字符串,让整个+都变成连接符
    }
}

执行结果:

 条件运算符

String type = score < 60?    不及格:及格;

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

eg.条件运算符

/**
 * 测试条件(三元)连接符的用法
 */

public class TestOperator07 {

    public static void main(String[] args){
        int score = 90;
        String  a = score<60?"不及格":"及格";

        System.out.println(a);

        if (score<60){
            a ="不及格";
        }else {
            a = "及格";
        }

        int x = -100;
        int flag = x >0 ? 1: (x == 0 ? 0 : -1);
        System.out.println(flag);  //结果是:-1
    }
}

执行结果:

 运算符优先级问题

 Note:

●  大家不需要刻意的记这些优先级,表达式里面优先使用小括号来组织!

●  逻辑与、逻辑或、逻辑非的优先级(逻辑非> 逻辑与> 逻辑或)

●  a||b&&c的运算结果是:a||(b&&c),而不是(a||b)&&c

优先级问题用法:

/**
 * 优先级问题的用法
 */


public class TestOperator08 {

    public static void main(String[] args){
        boolean s1 =true, s2=true,s3=false;
        System.out.println(s1||s2&&s3);  //逻辑运算符:非>与>或

        //建议使用小括号组织表达式
        boolean s4 = (3>1||4>3)&&(3<5);
        System.out.println(s4);
    }
}

执行结果:

 

本文含有隐藏内容,请 开通VIP 后查看