03-运算符

运算符介绍

运算符是一种特殊的符号,用于表示数据的运算、赋值和比较。

运算符分为算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、三元运算符。

1. 算术运算符

算术运算符是对数值类型的变量进行运算的,在Java程序中使用的非常多。

public class ArithmeticOperator{
    public static void main(String[] args){
        //1./除的使用
        System.out.println(10 / 4);   //输出2,这是因为10/4的结果是int类型
        System.out.println(10.0 / 4); //输出2.5,这是因为10/4的结果是double类型
        //思考
        double d = 10 / 4;
        System.out.println(d); //输出2.0,这是因为10/4的结果是int类型,然后转成double类型,从2变成2.0

        //2.%取模(取余)的使用
        //在%的本质,公式:a % b = a - a / b * b
        System.out.println(10 % 3);   //输出1
        System.out.println(10 % -3);  //输出-1
        System.out.println(-10 % 3);  //输出1
        System.out.println(-10 % -3); //输出-1

        //3.++的使用
        //作为独立的语句使用
        int i = 10;
        ++i; //自增(前),等价于 i = i + 1;
        i++; //自增(后),等价于 i = i + 1;
        System.out.println("i = " + i); //输出12

        //作为表达式使用
        //自增(前):先运算后取值
        //自增(后):先取值后运算
        int a1 = 10;
        int b1 = ++a1; //等价于,a1 = a1 + 1;b1 = a1;
        System.out.println("a1 = " + a1 + "\tb1 = " + b1); //输出a1 = 11    b1 = 11

        int a2 = 10;
        int b2 = a2++; //等价于,b2 = a2;a2 = a2 + 1;
        System.out.println("a2 = " + a2 + "\tb2 = " + b2); //输出a2 = 11    b2 = 10
        
    }
}

2.关系运算符(比较运算符)

关系运算符的结果都是boolean类型,也就是要么是true,要么是false。

关系运算符组成的表达式,我们称之为关系表达式。

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

        int a = 10;
        int b = 5;

        System.out.println(a > b);  //true
        System.out.println(a >= b); //true
        System.out.println(a < b);  //false
        System.out.println(a <= b); //false
        System.out.println(a == b); //false
        System.out.println(a != b); //true

        boolean flag = a > b;
        System.out.println(flag);   //true
    }
}

扩展:"==" 和 equals()方法的区别

a) "=="是判断两个字符串在内存中的位置是否相同(完全相同)

b) equals()方法,是判断两个字符串的内容是否相同(内容相同)

import java.util.Scanner;

public class BreakExercise{
    public static void main(String[] args){
        //需求:实现登陆验证,有三次机会,如果用户名为:admin 密码为:123456
        //则提示登录成功,否则提示还有几次机会【for + break】

        Scanner sc = new Scanner(System.in);
        String name = "";
        String pwd = "";

        for(int i = 3; i >= 1; i--){
            System.out.println("请输入用户名:");
            name = sc.next();
            System.out.println("请输入密码:");
            pwd = sc.next();

            // "=="是判断两个字符串在内存中的位置是否相同(完全相同)
            System.out.println(name == "admin" && pwd == "123456"); //false
            // equals()方法,是判断两个字符串的内容是否相同(内容相同)
            System.out.println(name.equals("admin") && pwd.equals("123456")); //true

            if(name.equals("admin") && pwd.equals("123456")){
                System.out.println("登录成功!");
                break;
            }else{
                System.out.println("用户名或密码错误,请重新登录,该用户还有" + (i-1) + "次机会...");
            }

        }
    }
}

3.逻辑运算符

用于连接多个条件(多个关系表达式),最终的结果也是一个boolean类型。

a) 逻辑与&,逻辑或|,逻辑异或^

逻辑与&:当a和b同时为true,则结果为true,否则结果为false

逻辑或|:当a和b有一个为true,则结果为true,否则结果为false

逻辑异或^:当a和b不同时,则结果为true,否则结果为false

b) 短路与&&,短路或||,取反!

短路与&&:当a和b同时为true,则结果为true,否则结果为false

短路或||:当a和b有一个为true,则结果为true,否则结果为false

取反!:当a为true,则结果为false;当a为false,则结果为true

这里需要注意:逻辑与& 和 短路与&& 的区别

逻辑与&:不管第一个条件是否为false,第二个条件都要判断(效率低)

短路与&&:如果第一个条件为false,则第二个条件不会判断,最终结果为false(效率高)

逻辑或| 和 短路或|| 的区别

逻辑或| :不管第一个条件是否为true,第二个条件都要判断(效率低)

短路或|| :如果第一个条件为true,则第二个条件不会判断,最终结果为true(效率高)

public class LogicOperator01{
    public static void main(String[] args){
        //&& 和 & 案例演示
        int age = 50;
        if(age > 20 && age < 90){
            System.out.println("ok100"); //输出ok100
        }

        //& 使用
        if(age > 20 & age < 90){
            System.out.println("ok200"); //输出ok200
        }

        //&& 和 & 区别
        //短路与&&:如果第一个条件为false,则第二个条件不会判断,最终结果为false
        int a = 5;
        int b = 10;
        if(a < 1 && ++b < 50){
            System.out.println("ok300");
        }
        String str1 = String.format("&&情况:a = %d\tb = %d",a,b);
        System.out.println(str1); //输出 &&情况:a = 5  b = 10

        //逻辑与&:不管第一个条件是否为false,第二个条件都要判断
        if(a < 1 & ++b < 50){
            System.out.println("ok400");
        }
        String str2 = String.format("&情况:a = %d\tb = %d",a,b);
        System.out.println(str2); //输出 &情况:a = 5  b = 11
    }
}

4.赋值运算符

赋值运算符就是将某个运算后的值,赋给指定的变量。

a) 基本赋值运算符 =

b) 复合赋值运算符 += 、-= 、*= 、 /= 、%= 等

这里需要注意:

赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值

复合赋值运算符,会进行类型转换

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

        int n1 = 10;
        n1 += 4; //等价于 n1 = n1 + 4;
        System.out.println(n1); //14

        n1 /= 3; //等价于 n1 = n1 / 4;
        System.out.println(n1); //4

        //复合赋值运算符会进行类型转换
        byte b = 3;
        b += 2; //等价于 b = (byte)(b + 2),这是因为 b + 2 的结果是 int类型
        b++;   //等价于 b = (byte)(b + 1)
    }
}

5.三元运算符

条件表达式?表达式1:表达式2;

a) 如果条件表达式为true,则运算后的结果是表达式1;

b) 如果条件表达式为false,则运算后的结果是表达式2;

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

        int a = 10,b = 99;
        //条件表达式?表达式1:表达式2;
        int result = a > b ? a++ : b--;
        //1.a > b为false
        //2.返回b--,先返回b的值,然后再b-1
        //3.返回的结果是99
        System.out.println("result = " + result); //result = 99
        System.out.println("b = " + b);  //b = 98

        //实现三个数的最大值
        int n1 = 55,n2 = 33,n3 = 123;
        //1.先得到n1 和 n2 中最大的数,保存到 max1
        //2.再得到n2 和 n3 中最大的数,保存到 max2
        int max1 = n1 > n2 ? n1 : n2;
        int max2 = max1 > n3 ? max1 : n3;
        System.out.println("最大的值为:" + max2);

        //扩展:使用一条语句实现
        int max = (n1 > n2 ? n1 : n2) > n3 ? (n1 > n2 ? n1 : n2) : n3;
        System.out.println("最大的值为:" + max);
    }
}

运算符优先级

 

posted @ 2023-07-05 01:41  马铃薯1  阅读(5)  评论(0编辑  收藏  举报