• Java基础语法-第四节-运算符


    • 运算符是一种特殊的符号,用以表示数据的运算,赋值和比较等

    算术运算符

    //除号:/
    int num1 =12;
    int num2 = 5;
    int result1 = num1 / num2;
    System.out.println(result1);//2
    int result2 = num1 / num2 * num2;
    System.out.println(result2);//10
    double result4 = num1 /num2 + 0.0;//2.0
    double result5 = num1 /(num2 + 0.0);//2.4
    double result6 = (double)num1 /num2;//2.4
    double result7 = (double)(num1 /num2);//2.0
    System.out.println(result5);
    System.out.println(result6);
    
    //%:取余运算
    //结果的符号与被模数的符号相同
    //开发中,经常使用%来判断能否被除尽的情况
    int m1 = 12;
    int n1 = 5;
    System.out.println("m1%n1 = "+m1%n1);//2
    int m2 = -12;
    int n2 = 5;
    System.out.println("m2%n2 = "+m2%n2);//-2
    int m3 = 12;
    int n3 = -5;
    System.out.println("m3%n3 = "+m3%n3);//2
    int m4 = -12;
    int n4 = -5;
    System.out.println("m4%n4 = "+m4%n4);//-1
    
    //(前)++ :先自增1,后运算
    //(后)++ :先运算,后自增1
    int a1 = 10;
    int b1 = ++a1;
    System.out.println("a1: " + a1 + " b1: "+ b1);//a1: 11 b1: 11
    int a2 = 10;
    int b2 = a2++;
    System.out.println("a2: " + a2 + "b2: "+ b2);//a1: 11 b1: 10
    int a3 = 10;
    ++a3;//a3++
    int b3 = a3;
    //注意点
    short s1 = 10;
    //s1 = s1 + 1;//编译失败
    s1 = (short)(s1+1);//正确的
    s1++;//自增1不会改变本身变量的数据类型
    byte by1 = 127;
    by1++;
    System.out.println(by1);//-128
    
    //(前)-- :先自减1,后运算
    //(后)-- :先运算,后自减1
    int a4 = 10;
    int b4 = a4--;
    System.out.println("a4: " + a4 + " b4: "+ b4);//a4: 9 b4: 10
    byte by2 = -128;
    by2--;
    System.out.println(by2);//127
    

    赋值运算符

    • 符号:=
      • 当=两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理
      • 支持连续赋值
    • 扩展赋值运算符:+=,-=,*=,/=,%=
    //赋值符号:=
    int i1 = 10;
    int j1 = 10;
    int i2,j2;
    //连续赋值
    i2=j2=10;
    int i3=10,j3=10;
    int num =10;
    num += 2;
    System.out.println(num);//12
    int num2 = 12;
    num2 %= 5;
    System.out.println(num2);
    //开发中,如果希望变量实现+2操作,有几种方法?(前提:int num = 10)
    //方式一:num = num +2;
    //方式二:num += 2;(推荐)
    //开发中,如果希望变量实现+1操作,有几种方法?(前提:int num = 10)
    //方式一:num = num +1;
    //方式二:num += 1;
    //方式三:num++;(推荐)
    //练习一
    short s1 = 10;
    //s1 = s1 + 2;//编译失败
    s1 += 2;//不会改变变量自身的数据类型
    System.out.println(s1);
    //练习二
    int i =1;
    i*=0.1;
    System.out.println(i);//1
    i++;
    System.out.println(i);
    //练习三
    int m = 2;
    int n = 3;
    n *= m++;
    System.out.println("m="+m);
    System.out.println("n="+n);
    //练习四
    int n1 = 10;
    n1 +=(n1++) + (++n1);
    System.out.println(n1);//32
    

    比较运算符

    • 比较运算符的结果都是boolean型,也就是要么是true,要么是false
    • 比较运算符“==”不能误写成“=”
    int i=10;
    int j=20;
    System.out.println(i==j);//false
    System.out.println(i=j);//20
    boolean b1 = true;
    boolean b2 =false;
    System.out.println(b2==b1);//false
    System.out.println(b2 = b1);//true
    

    逻辑运算符

    • &:逻辑与。|:逻辑或。!:逻辑非
    • &&:短路与。||:短路或。^:逻辑异或
    • 逻辑运算符操作的都是boolean类型的变量

    //区分&与&&
    //相同点1:&与&&的运算结果相同
    //相同点2:当符号左边是true时,二者都会执行符号右边的运算
    //不同点3:当符号左边是false时,&会继续执行符号右边的运算,而&&不再执行符号右边的运算
    //开发中推荐使用&&
    boolean b1 = true;
    b1=false;
    int num1 =10;
    if(b1&(num1++>0)){
        System.out.println("是");
    }else{
        System.out.println("否");
    }
    System.out.println("num1: " + num1);
    //输出否
    //num1: 11
    boolean b2 = true;
    b2=false;
    int num2 =10;
    if(b2&&(num2++>0)){
        System.out.println("是");
    }else{
        System.out.println("否");
    }
    System.out.println("num2: " + num2);
    //输出否
    //num2: 10
    //区分|与||
    //相同点1:|与||的运算结果相同
    //相同点2:当符号左边是false时,二者都会执行符号右边的运算
    //不同点3:当符号左边是true时,|会继续执行符号右边的运算,而||不再执行符号右边的运算
    //开发中推荐使用||
    boolean b3 = true;
    int num3 =10;
    if(b3|(num3++>0)){
        System.out.println("是");
    }else{
        System.out.println("否");
    }
    System.out.println("num3: " + num3);
    //输出是
    //num3: 11
    boolean b4 = true;
    int num4 =10;
    if(b4 || (num4++>0)){
        System.out.println("是");
    }else{
        System.out.println("否");
    }
    System.out.println("num4: " + num4);
    //输出是
    //num4: 10
    

    位运算符

    • 位运算符是直接对整数的二进制进行的运算

    • <<:在一定范围内,每向左移一位,相当于*2

    • :在一定范围内,每向右移一位,相当于/2

    int i = 21;
    i =-21;
    System.out.println("i << 2 :"+(i<<2));//-84
    System.out.println("i << 3 :"+(i<<3));//-168
    System.out.println("i << 27 :"+(i<<27));//1476395008
    int m =12;
    int n =5;
    System.out.println("m&n: "+(m&n));//4
    System.out.println("m|n: "+(m|n));//13
    System.out.println("m^n: "+(m^n));//9
    int k=6;
    System.out.println(~k);//-7
    

    //练习:交换两个变量的值
    int num1 = 10;
    int num2 = 20;
    System.out.println("num1:"+num1+" num2: "+num2);
    //方式一:定义临时变量的方式
    int temp = num1;
    num1 = num2;
    num2 = temp;
    //方式二:相加的方式
    //好处:不用定义临时变量
    //弊端:①相加操作可能超出存储范围②有局限性,只能适用于数值类型
    num1 = num1 + num2;
    num2 = num1 - num2;
    num1 = num1 - num2;
    //方式三:使用位运算符
    //有局限性,只能适用于数值类型
    num1 = num1 ^ num2;
    num2 = num1 ^ num2;
    num1 = num1 ^ num2;
    System.out.println("num1:"+num1+" num2: "+num2);
    

    三元运算符

    • (条件表达式)?表达式1:表达式2
      • 条件表达式为true,运算后的结果是表达式1
      • 条件表达式为false,运算后的结果是表达式2
    • 表达式1和表达式2为同种类型
    Object o1 = true ? new Integer(1) : new Double(2.0);
    System.out.println(o1);//1.0
    //三目运算符中的Integer型的数字1会自动提升为1.0.以与后面的类型相同
    
    • 三元运算符与if-else的联系与区别
      • 三元运算符可以简化if-else语句
      • 三元运算符要求必须返回一个结果
      • if后的代码块可有多个语句
    //获取两个整数的较大值
    int m = 12;
    int n = 5;
    int max = (m>n)? m : n;
    System.out.println(max);//12
    double num = (m>n)?2:1.0;
    //(m>n)?2:"n大";//编译错误
    int a=5;
    int b=12;
    String maxStr = (a>b)?"a大":((a==b)?"a和b相等":"b大");
    System.out.println(maxStr);//b大
    //获取三个数的最大值
    int n1 = 12;
    int n2 = 30;
    int n3 = -23;
    int max1 = (n1>n2)?n1:n2;
    int max2 = (max1>n3)?max1:n3;
    System.out.println("三个数中最大的是:"+max2);//30
    int max3 = (((n1>n2)?n1:n2)>n3)?((n1>n2)?n1:n2):n3;//不建议这样编写
    System.out.println("三个数中最大的是:"+max2);//30
    

    运算符的优先级

    • 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下表,上一行运算符总是优先于下一行
    • 只有单目运算符,三元运算符,赋值运算符是从右向左运算的。

    总结

    运算符之一:算术运算符
    	+ - * / (前)++ (后)++ (前)-- (后)-- +(连接符)
    	%:取余运算
    		结果的符号与被模数的符号相同
    		开发中,经常使用%来判断能否被除尽的情况
    	(前)++ :先自增1,后运算
    	(后)++ :先运算,后自增1
    	(前)-- :先自减1,后运算
    	(后)-- :先运算,后自减1
    		不会改变本身变量的数据类型
    运算符之二:赋值运算符
    	= += -= *= /= %=
    	不会改变变量自身的数据类型
    运算符之三:比较运算符
    	== != < > <= >= instanceof
    	1.比较运算符的结果是boolean类型
    	2.区分==和=
    运算符之四:逻辑运算符
    	&,&&,|,||,^,!
    	1.逻辑运算符操作的都是boolean类型的变量
    运算符之五:位运算符
    	<< >> >>> & | ^ ~
    	1.位运算符操作的都是整型的数据
    	2.<<:在一定范围内,每向左移一位,相当于*2
    	  >>:在一定范围内,每向右移一位,相当于/2
    	面试题:最高效的方式计算2*8?2<<3或8<<1
    运算符之六:三元运算符
    	(条件表达式)?表达式1:表达式2
    	1.条件表达式的结果为boolean类型
    	2.根据条件表达式真或假,决定执行表达式1还是表达式2
    	3.表达式1和表达式2要求是一致的
    	4.三元运算符可以嵌套使用
    	5.凡是可以用三元运算符的地方都可以改写成if-else结构。
    	反之不可以
    	6.如果程序既可以用三元运算符还可以用if-else结构。
    	那么推荐使用三元运算符。原因:简洁,执行效率高
    
  • 相关阅读:
    windows 安装 make
    go lang AES 加密
    Microsoft .NET Framework 5.0
    Prometheus+Grafana+Alertmanager实现告警推送教程 ----- 图文详解
    ElasticSearch实战系列九: ELK日志系统介绍和安装
    1024快乐,加班使我快乐,福报如圣光醍醐灌顶!
    react-redux笔记
    (转)Vuex、Flux、Redux、Redux-saga、Dva、MobX
    React笔记
    SQLServer设置客户端使用IP地址登录
  • 原文地址:https://www.cnblogs.com/mzchuan/p/13884666.html
Copyright © 2020-2023  润新知