0
点赞
收藏
分享

微信扫一扫

【java基础07:运算符】算术、关系、逻辑、赋值类、字符串连接运算符,三元运算符

钎探穗 2022-04-21 阅读 74

目录

算术运算符

关系运算符

逻辑运算符

赋值类运算符

字符串连接运算符

三元运算符 / 三目运算符 / 条件运算符


算术运算符

+-*/%++
求和相减乘积求余数(取模)自加1自减1

注意:一个表达式当中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。没必要去专门记忆运算符的优先级。

  • + - * / %

    public class OperatorText01 {
        public static void main(String[] args){
            int i= 10;
            int j= 3;
    
            System.out.println(i+j);//13
            System.out.println(i-j);//7
            System.out.println(i*j);//30
            System.out.println(i/j);//3
            System.out.println(i%j);//1
        }
    }
    
  • K++运算符【自加1】、K–运算符【自减1】

    • ++运算符可以出现在变量前,也可以出现在变量后,无论是变量前还是变量后。只要++运算结束,该变量中的值一定会自加1

      ++出现在变量后,规则:先做赋值运算。再对变量中保存的值进行自加1

      ++出现在变量前,规则:先进行自加1运算。再进行赋值操作

    • //println()原理 ln(int x=‘mm’)

    • –运算符可以出现在变量前,也可以出现在变量后,无论是变量前还是变量后。只要–运算结束,该变量中的值一定会自减1

      –出现在变量后,规则:先做赋值运算。再对变量中保存的值进行自减1

      –出现在变量前,规则:先进行自减1运算。再进行赋值操作

      public class OperatorText01 {
          public static void main(String[] args){
      
              int k= 10;
              k++;//++运算符可以出现在变量后面【单目运算符】
              System.out.println(k);//11
      
              int y= 10;
              ++ y;//++运算符可以出现在变量前面【单目运算符】
              System.out.println(y);//11
      
              //++运算符可以出现在变量前,也可以出现在变量后,无论是变量前还是变量后
              //只要++运算结束,该变量中的值一定会自加1
      
              //++出现在变量后,规则:先做赋值运算。再对变量中保存的值进行自加1
              int a= 100;
              int b= a++;
              System.out.println(a);//101
              System.out.println(b);//100
      
              //++出现在变量前,规则:先进行自加1运算。再进行赋值操作
              int m= 100;
              int n= ++m;
              System.out.println(m);//101
              System.out.println(n);//101
      
              //println()原理  ln(int x='mm')
              int mm= 500;
              System.out.println(mm);//500
      
              int e=100;
              System.out.println(e ++);//100  e是100,但++在变量后,先赋值
              System.out.println(e);//101    上面的e运算之后是101,再输出就是101
      
              int s= 200;
              System.out.println(++s);//201   ++在变量前,先运算后赋值
              System.out.println(s);//201     上面有++运算了,所以直接取运算后的值
      
              System.out.println(--s);//200   --在变量前,取201-1就是200
              System.out.println(s++);//200   
              //++在变量后,先赋值取上面语句运算后的值200
              System.out.println(s--);//201   --在变量后,先赋值取去上面运算后的值201
              System.out.println(s--);//200   --在变量后,先赋值取上面运算后的值200
              System.out.println(s--);//199   --在变量后,先赋值取上面运算后的值199
              System.out.println(s);//198     输出上面语句运算后s的值
      
              int t=20;
              t--;
              System.out.println(t);//19
      
              int u=30;
              --u;
              System.out.println(u);//29
      
              int tt=40;
              int w= tt--;
              System.out.println(tt);//39  tt赋值40,但是下面有个tt--,所以是39
              System.out.println(w);//40  
              //因为--在tt后面,所以先赋值再运算,w输出tt的值
              int r=--tt;
              System.out.println(r);//38
              // r之前已经有一个tt--,运算后是39,又因为赋值r时
              //--在变量前,所以先运算,再赋值是38
      
          }
      }
      
      

关系运算符

>>=<<===!=
大于大于等于小于小于等于等于不等于
  • =是赋值运算符 ==是关系运算符

  • 关系运算符的运算结果一定是布尔类型:true/false

  • 关系运算符的运算原理:

    ​ int a= 10; int b= 10;

    a > b 比较的时候,比较的是a中保存的10这个值和b中保存的10这个值之间的大小比较。

    a == b 也是如此

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

逻辑运算符

&逻辑与【并且】(两边的算子都是true,结果才是true) 全真为真
|逻辑或【或者】(两边的算子只要有一个是true,结果就是true) 有真为真
!逻辑非(取反, !false就是true, !true就是false,这是一个单目运算符)
^逻辑异或(两边的算子只要不一样,结果就是真)
&&短路与
||短路或
  • 逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型。

  • 短路与 和 逻辑与 最终的运算结果都是相同的,只不过 短路与 存在短路现象。

    短路或 和 逻辑或 最终的运算结果都是相同的,只不过 短路或 存在短路现象。

    public class OperatorText03 {
        public static void main(String[] args){
    
            //运算符优先级不确定,加小括号
            System.out.println(5>3 & 5>2);//true
            System.out.println(5>3 & 5>6);//false
            System.out.println(5>3 | 5>6);//true
    
            System.out.println(true & true);//true
            System.out.println(true & false);//false
            System.out.println(false & true);//false
            System.out.println(false & false);//false
    
            System.out.println(true | false);//true
            System.out.println(false | true);//true
            System.out.println(false | false);//false
            System.out.println(true | true);//true
    
            System.out.println(!false);//true
            System.out.println(!true);//false
    
            System.out.println(true ^ false);//true
            System.out.println(false ^ true);//true
            System.out.println(true ^ true);//false
            System.out.println(false ^ false);//false
        }
    }
    
    
  • 逻辑与 和 短路与

    • 逻辑与:全部执行 短路与:如果运算符左边算子false,右边的算子不执行。

    • 从某个角度看,短路与更智能。由于后面的表达式可能不执行,所以执行效率更高。在实际开发中,短路与比逻辑与使用多。短路与更实用。

      但是,在某些特殊的业务逻辑当中,要求运算符两边的算子必须全部执行,此时必须使用逻辑与。使用短路与可能导致右边的表达式不执行

    public class OperatorText03 {
        public static void main(String[] args){
    
    	   /*逻辑与
            int x= 10;
            int y= 8;
            System.out.println(x<y & ++x<y);
            System.out.println(x);//11
           */
    
            //短路与
            int x= 10;
            int y= 8;
            System.out.println(x<y && ++x<y);
            System.out.println(x);//10
            /* x<y 结果是false,整个表达式结果已经确定是false。
            所有后面的表达式不再执行,这种现象称为短路现象
            短路与才会有短路现象,逻辑与是不会存在短路现象的
             */
        }
    }
    
  • 发生短路与的情况:运算符左边的算子执行结果false

    发生短路或的情况:运算符左边的算子执行结果是true

赋值类运算符

基本的赋值运算符扩展的赋值运算符
=+=
-=
*=
/=
%=
  • 赋值类运算符的优先级:先执行=右边的表达式,将执行结果赋值给左边的变量。

  • 结论:扩展类的赋值运算符不改变运算结果类型。假设变量最初是byte类型,无论如何追加或追减,最终变量的数据类型还是byte类型。

  • byte b= 10;    b +=5;//等同于:b=(byte)(b+5);
    int i= 10;     i +=5;//等同于:i=(int)(i+5);
    long l= 10L;    int y=20
    y +=l;//等同于:y=(int)(y+l)
    
    public class OperatorText04 {
        public static void main(String[] args){
            int i= 10;
            i =i + 5;
            System.out.println(i);//15
    
            //扩展的赋值运算符【+=运算符可以翻译为“追加/累加”】
            i += 5; //等同于 i= i + 5;
            System.out.println(i);//20
    
            i -= 5; //等同于i = i -5;
            System.out.println(i);//15
    
            i *= 2; //等同于i = i * 2;
            System.out.println(i);//30
    
            i /= 4; //等同于i = i / 4;
            System.out.println(i); // 7.5取整数位是7
    
            i %= 2; //等同于i = i % 2;
            System.out.println(i);
    //        -----------------------------------------
            byte b= 10;//10没有超出byte取值范围,可以直接赋值
            //b= 15;   编译通过,15没有超出byte取值范围
            //b= b+5;  编译报错  大容量——>小容量需要加强制类型转换符
            //编译器只检查语法,不运行程序,编译器发现b+5是int类型,b类型的数据类型是byte
    
            //纠错
            b =(byte)(b+5);
            System.out.println(b);//15
    
            byte x= 10;
            x += 5;//等同于 x=(byte)(x+5);  实际上并不同于x=x+5;
            System.out.println(x);//15
    
            byte z= 0;
            z +=128;//-128    等同于z=(byte)(z+128);
            System.out.println(z);
    
            z +=10000;// 等同于:z= (byte)(z+10000);
            System.out.println(z);//-112
        }
    }
    
    

字符串连接运算符

java中的“+”运算符

  1. “+” 在java中的两个作用

    • 加法运算,求和
    • 字符串的连接运算
  2. “+”两边的数据都是数字时,一定是进行加法运算。

  3. “+”两边的数据只要有一个数据是字符串,一定会进行字符串连接运算。并且,连接运算之后的结果还是一个字符串类型。

    数字 + 数字 ———>数字【求和】

    数字 + 字符串———>字符串【字符串连接】

  4. 在一个表达式中可以出现多个“+”,如果没有添加小括号,遵循自左向右的顺序依次运算。

public class OperatorText05 {
    public static void main(String[] args){

        System.out.println(10+20);// 30   这里的+是求和
        System.out.println(10+20+30);//  60   这里的+也是求和
        System.out.println(10+20+"30");// 3030 第一个+是求和,第二个是字符连接
        System.out.println(10+(20+"30"));// 102030
        //优先括号里字符连接:2030,是一个字符串,再括号外字符连接


        //要求在控制台上 以动态形式 输出 “ 10+20=30 ”
        int a= 10;
        int b= 20;
        System.out.println("10+20=30");//固态的
        System.out.println("10+20="+(a+b));
        System.out.println(a+"+20="+(a+b));
        System.out.println(a+"+b="+(a+b));//10+b=30
        a=100;  b=200;
        System.out.println(a+"+"+b+"="+(a+b));//动态

        /*
        引用类型String
        String是SUN在JAVASE中提供的字符串类型
        String.class字节码文件
         */

        int i= 10;
        // int 是基本数据类型,i是变量名,10是int类型的字面值

        String s="abc";
        //String 是引用数据类型,s是变量名,"abc"是String类型的字面值

        //定义一个String类型的变量,起名username,赋值"zhangsan"
        String username="zhangsan";

        System.out.println("登陆成功,欢迎username回来");//登陆成功,欢迎username回来
        System.out.println("登陆成功,欢迎"+"回来");//登陆成功,欢迎回来
        System.out.println("登陆成功,欢迎"+username+"回来");//登陆成功,欢迎zhangsan回来

        username="jack";
        System.out.println("登陆成功,欢迎"+username+"回来")//登陆成功,欢迎jack回来
    }
}

三元运算符 / 三目运算符 / 条件运算符

  1. 语法规则:布尔表达式?表达式1:表达式2

  2. 三元运算符的执行原理:

    当布尔表达式的结果是true时,选择表达式1作为整个表达式的执行结果。

    当布尔表达式的结果是false时,选择表达式2作为整个表达式的执行结果。

public class OperatorText06 {
    public static void main(String[] args){

        //编译错误,不是一个完整的java语句
        //10;

        //编译错误:不是一个完整的java语句。
        //'男';

        //布尔型变量
        boolean sex= false;

        //编译报错:不是一个完整的java语句
        // sex ? '男':'女'

        char c= sex ? '男':'女';
        System.out.println(c);//女

        sex =true;
        c =(sex?'男':'女');
        System.out.println(c);//男

        //语法错误,编译报错。类型不兼容
        // 结果可能是String也可能是char,但是前边不能用char来接收数据
        //char c1=sex ?"男":'女';

        System.out.println(sex ? "男":'女');// 可使用,输出:男

        String s=sex?"男的":"女的";
        System.out.println(s);//男的
    }
}
举报

相关推荐

0 条评论