java运算符

知识框架

运算符概述

运算符是指对操作数的运算方式。例如:1 + 2,其中1和2都是操作数, + 是操作符,操作符和操作数组成在一起就构成了表达式。运算符按照操作数的个数来分,可以分为单目运算符,双目运算符,三目运算符。运算符按照功能来分,分为算数运算符,赋值运算符,关系运算符,逻辑运算符,位运算符,条件运算符,字符串连接运算符等。常见的运算符如下表所示

算术运算符+,-,*,/,%,++,--
关系运算符>,>=, <,<=,==, !=
逻辑运算符&,|,!,&&,||
赋值运算符=,+=,-=,*=,/=,%=,^=,&=,|=,<<=,>>=
位运算符&,|,^,~,<<,>>,>>>
条件运算符布尔表达式 ?表达式1:表达式2
字符串连接运算符

 算术运算符

算术运算符包括:+,-,*,/,%,++,--。

请看如下代码:

​
public class ArithmeticOperatorTest1 {
    public static void main(String[] args) {
        int a = 5;
        int b = 10;
        System.out.println(a + b);//15
        System.out.println(a - b); //-5
        System.out.println(a * b); //50

        /*
          在数学运算中 5 / 10 = 0.5
          在Java中 5 / 10 的结果不是0.5,在java中有一个语法规则:
          int类型和int类型做运算,最终结果还是int类型,所以5 / 10
          的结果就是0,这个过程会取整数部分。
         */
        System.out.println(a / b); //0
        //  求余数:
        System.out.println(a % b); //5

        /*
          ++和--都是单目运算符,++负责自加1,--负责自减
           ++无论是出现在变量前还是变量后,只要执行完++
           最终的结果都会让变量自加1
         */
        int i = 10;
        i++;
        System.out.println("i = " + i);//11
        int j = 10;
        ++j;
        System.out.println("j = " + j);//11


        //在java语法规定,当++运算符出现在变量后(后置++),会先做赋值运算,再加1
        //k = 11   l = 10
        int k = 10;
        int l = k++;
        System.out.println("k = " + k);//11
        System.out.println("l = " + l);

        //java语法规定:++出现在变量前面(前置++)会先进行自加1,然后再进行赋值运算
        //x = 11   y = 11
        int x = 10;
        int y = ++x;
        System.out.println("x = " + x); //11
        System.out.println("y = " + y); //11

        //操作符两侧的操作数类型不一致时,向类型大的提升:
         System.out.println(1 + 1.2); //2.2
     }
  }

​
 

通过上述代码可知:

1:两个int类型的数据进行数学运算之后所得的结果一定还是int类型。

2:操作符两侧的操作数类型不一致时,向类型大的提升。

2:++或者--可以出现在变量前,也可以出现在变量之后,只要执行了++,变量一定会自加1

只要执行了--,变量一定会自减1。

3:前置++变量先加1,再进行赋值运算;后置++,先进行赋值运算,变量在加1,前置--和后置--道理和前置++,后置++一样。

int c = 100;
System.out.println(c++);//100
System.out.println(c); // 101
int d = 100;
System.out.println(++d);  //101
System.out.println(d);//101

注意:在进行/和%操作时,右操作数不能为0,否则就会抛异常。

看如下代码:

  System.out.println(3/0);
  System.out.println(10%0);

关系运算符

关系运算符主要是完成数据和数据之间的比较。例如:1 > 2结果是false,  10 > 5结果是true,常见的关系运算符有 >, >=, <, <=, ==, !=。任何一个关系运算的运算结果都是布尔类型。

请看如下代码:

public class RelationOperatorTest01 {
    public static void main(String[] args) {
        int a = 5;
        int b = 5;
        System.out.println(a > b);
        System.out.println(a < b);
        System.out.println(a >= b);
        System.out.println(a <= b);
        System.out.println(a == b);//a变量里面存储的值和b变量里面存储的值进行比较
        System.out.println(a != b);
    }
}

运行结果:

逻辑运算符

逻辑运算符主要包括逻辑与(&),逻辑或(|),逻辑异或(^),短路与(&&),短路或(||)。逻辑运算符的特点就是操作数和最终的运算结果都是布尔值。逻辑运算规则如下表所以:

     操作符       例子  结果                         描述
        & true&true    true(3>2)&(2>1):3大于2并且2大于1
         | true|false    true(10>8)| (3>5):10大于8或3大于5
         ! !false    truefalse取反是true,true取反是false
         ^ true^false    true异或,只要两边的操作数不同,就是true
         && true&&true    true 最终结果和逻辑与一样,但是会发生短路
         || true||false    true最终结果和逻辑或一样,但是会发生短路

请看如下代码:

public class ArithmeticOperatorTest3 {
    public static void main(String[] args) {
        System.out.println(5 > 3 & 6 > 5); //true
        System.out.println(10 > 15 | 10 < 12);//true
        System.out.println(!(3 > 2));//false
        System.out.println(true & false);//false
        System.out.println(true | false);//true
        System.out.println(true ^ false);//true
        System.out.println(!true);//false
        
    }
}
逻辑与(&)和短路与(&&)的区别:请看如下代码:
public class LogicalOperatorTest1 {
    public static void main(String[] args) {
        int a = 200;
        int b = 150;
        int c = 180;
        //逻辑与和短路与最终的运行结果一致:
        System.out.println(a > b & a > c);
        System.out.println(a > b && a > c);

        /*
          逻辑与运算符只有当两边的操作数都是true的时候,结果才是true,只要有一个是false,
          结果必然是false.逻辑与运算符无论左边表达式结果是true还是false,右边表达式一定会执行。

         */
        int m = 99;
        int n = 100;
        System.out.println(m > n & m>n++);
        System.out.println(n); //101说明右边表达式被执行

        int x = 99;
        int y = 100;
        System.out.println(x > y && x> y++);
        System.out.println(y); //100,说明右边表达式没有被执行
    }
}

结论:逻辑与右边的表达式一定会被执行,短路与当左边表达式为false的时候,右边表达式不会被执行(短路现象),这种机制更加智能化,效率更高一些,(逻辑或 与 短路或同理)。

赋值运算符

常见的赋值运算符有:=, +=,-=,*=,/=, %= 。

public class AssignmentOperatorTest {
    public static void main(String[] args) {
        //基本的赋值运算符:
        int a = 10;
        System.out.println("a = " + a);//10

        //扩展的赋值运算符:
        int b = 100;
        b += 10;
        System.out.println("b = " + b);//110

        int x = 10;
        x -= 10;
        System.out.println("x = " + x);//0

        int y = 20;
        y *= 2;
        System.out.println("y = " + y);//40

        int z = 100;
        z /= 10;
        System.out.println("z = " + z);//10

        int m = 6;
        m %= 3;
        System.out.println("m = " + m);//0
    }
}

注意:基本的赋值运算符和扩展的赋值运算符不一样:如x+=1 和x = x + 1

请看如下代码:

public class AssignmentOperatorTest1 {
    public static void main(String[] args) {
        byte x = 1;
        x+=1;
        System.out.println(x);//2
        x = x + 1;//编译不通过

/*
     x = x + 1;//编译不通过编译不通过的原因:x是属于byte类型,而1是属于int类型,按照类型转换
     规则,int和byte进行混合运算时,最终的结果是属于int 类型,而int类型无法赋值给byte类型的变             量

*/
        
    }
}

byte x = 1; x+=1; System.out.println(x);//2 这句话可以正确运行的原因:

java对于扩展类型的赋值运算符进行了特殊处理,所有的扩展赋值运算符

最终都不会改变运算的结果类型,比如前面的变量byte类型,

那么 x+=1这种写法就等同于 x = (byte)(x + 1)。在使用扩展类赋值运算符的时候要谨慎,可能会发生精度丢失。

条件运算符

条件运算符属于三目运算符,它的语法格式如下:

布尔表达式 ? 表达式1:表达式2

条件运算符运行的原理:先判断布尔表达式,如果结果是true则执行表达式1,否则执行表达式2

public class ConditionalOperatorTest {
    public static void main(String[] args) {
        int x = 10;
        int y = 10;
        System.out.println(x == y ? "x和y相等" : "x和y不相等");
    }
}

字符串连接运算符

"+"运算符在java当中有两个作用,第一个作用是对数字进行求和运算;第二个作用是字符串连接运算。如果"+''两边的操作数都是数字的话,一定是求和运算,但只要其中一个操作数是字符串,那就一定是字符串拼接运算,字符串拼接之后的结果还是字符串类型。当一个表达式当中有多个"+",并且在没有小括号的前提之下遵循自左向右的顺序依次执行。

看如下代码:

public class PlusTest {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a + b);//30
        System.out.println("a + b = " + a + b);//a + b = 1020
        System.out.println("a + b =" + " " + (a + b) );//a + b = 30
        System.out.println("欢迎" + "name" + "回家!");
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值