运算符

1.算数运算符

1.1运算符和表达式

  • 运算符:对常量或者变量进行操作的符号

  • 表达式:用运算符把常量或者变量连接起来符合Java语法的式子就可以成为表达式。不同运算符连接的表达式体现的是不同类型的表达式。

  • 举例说明:

    int a=10;
    int b=20;
    int c=a+b;
    //+是运算符,并且是算术运算符
    //a+b 是表达式,由于+是算术运算符,所以这个表达式叫算术表达式
    

1.2算术运算符

+:加

-:减

*:乘

/:除

%:取余

public class OperatorDemo01 {
    public static void main(String[] args){
        //定义两个变量
        int a=6;
        int b=4;
        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);
        //除法得到的是商,取余得到的是余数

        //整数相除只能得到整数,要想得到小数,必须有浮点数的参与
        System.out.println(6.0/4);
    }
}

1.3字符的“+”操作

'A'值为65,'A'~'Z'是连续的

'a'值为97,'a'~'z'是连续的

'0'值为48,'0'~'9'是连续的

算术表达式中包含多个基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。

提升规则:

  • byte类型,short类型和char类型将被提升到int类型。

  • 整个表达式的类型自动提升到表达式中最高等级操作数同样的类型,

    等级顺序:byte,short,char->int->long->float->double

public class OperatorDemo02 {
    public static void main(String[] args){
        //定义两个变量
        int i=10;
        char c='A';//'A'的值为65
        char b='a';//'a'的值为97
        char d='0';//'0'的值为48
        System.out.println(i+c);
        System.out.println(i+b);
        System.out.println(i+d);
        //char ch=i+c;报错,i+c会自动类型提升为int类型
        int ch=i+c;
        //int d1=10+13.14;报错,10+13.14会自动类型提升为double类型
        double d1=10+13.14;
    }
}

1.4字符串的“+”操作

当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算。

在“+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算符。当连续进行“+”操作时,从左到右逐个执行。

public class OperatorDemo03 {
    public static void main(String[] args){
        System.out.println("it"+"heima");
        System.out.println("itheima"+666);
        System.out.println("666"+"heima");
        System.out.println("黑马"+66+6);
        System.out.println(1+99+"黑马");
    }
}

2.赋值运算符

10
public class OperatorDemo04 {
    public static void main(String[] args){
        //把10赋值给int类型的变量i
        int i=10;
        System.out.println("i:"+i);

        //+=是把左边和右边的数据做加法操作,结果赋值给左边;+=的操作隐含了强制类型转换
        i+=20;//即i=i+20
        System.out.println("i:"+i);
        //注意
        short s=10;
        s+=20;//不报错,+=包含了强制类型转换,即s=(short)(s+20);
        System.out.println("s:"+s);
        //s=s+20;报错,不兼容的类型,s+20为int类型与原来short类型的s不兼容
        
    }
}

注意事项:

扩展的赋值运算符隐含了强制类型转换

3.自增自减运算符

11

注意事项:

  • ++ 和--既可以放在变量的后边,也可以放在变量的前面。

  • 单独使用的时候,++和--无论是放在变量的前边还是后边,结果是一样的。

  • 参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--,

    参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。

public class OperatorDemo05 {
    public static void main(String[] args){
        //定义变量
        int i=10;
        System.out.println("i:"+i);
        //单独使用
        i++;
        System.out.println("i:"+i);
        ++i;
        System.out.println("i:"+i);
        //参与操作使用
        System.out.println("i:"+(++i));//先增后用
        System.out.println("i:"+(i++));//先用后增
        System.out.println("i:"+i);
    }
}

4.关系运算符

12

注意事项:

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

千万要区分“==”和“=”

public class OperatorDemo06 {
    public static void main(String[] args){
        //定义变量
        int i=10;
        int j=20;
        int k=10;

        //==
        System.out.println(i==j);
        System.out.println(i==k);
        System.out.println("--------");
        //!=
        System.out.println(i!=j);
        System.out.println(i!=k);
        System.out.println("--------");
        //>
        System.out.println(i>j);
        System.out.println(i>k);
        System.out.println("--------");
        //>=
        System.out.println(i>=j);
        System.out.println(i>=k);
        System.out.println("--------");
        //如果不小心把==写成=,会先赋值再输出
        System.out.println(i=j);
    }
}

5.逻辑运算符

5.1逻辑运算符概述

在数学中,一个数据x,大于3,小于6,我们可以这样来进行表示:3<x<6

在Java中,需要把上面的式子先进行拆解,在进行合并表达。

  • 拆解为x>3和x<6
  • 合并为x>3&&x<6

&&其实就是一个逻辑运算符。

我们可以说,逻辑运算符,是用来连接关系表达式的运算符。

当然,逻辑运算符也可以连接布尔类型的常量或者变量。

5.2逻辑运算符

13

public class OperatorDemo07 {
    public static void main(String[] args){
        //定义变量
        int i=10;
        int j=20;
        int k=30;

        //&逻辑与(有false则false)
        System.out.println((i>j)&(i>k));//false&false
        System.out.println((i<j)&(i>k));//true&false
        System.out.println((i>j)&(i<k));//false&true
        System.out.println((i<j)&(i<k));//true&true
        System.out.println("---------");

        //|逻辑或(有true则true)
        System.out.println((i>j)|(i>k));//false&false
        System.out.println((i<j)|(i>k));//true&false
        System.out.println((i>j)|(i<k));//false&true
        System.out.println((i<j)|(i<k));//true&true
        System.out.println("---------");

        //^逻辑异或(相同false,不同true)
        System.out.println((i>j)^(i>k));//false&false
        System.out.println((i<j)^(i>k));//true&false
        System.out.println((i>j)^(i<k));//false&true
        System.out.println((i<j)^(i<k));//true&true
        System.out.println("---------");

        //!逻辑非
        System.out.println(i>j);//false
        System.out.println(!(i>j));//!false
        System.out.println(!!(i>j));//!!false
    }
}

5.3短路逻辑运算符

14

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

        //定义变量
        int i=10;
        int j=20;
        int k=30;

        //&&(有false则false.左边有false右边就不执行了)
        System.out.println((i>j)&&(i>k));//false&&false
        System.out.println((i<j)&&(i>k));//true&&false
        System.out.println((i>j)&&(i<k));//false&&true
        System.out.println((i<j)&&(i<k));//true&&true
        System.out.println("---------");
        //||(有true则true.左边有true右边就不执行了)
        System.out.println((i>j)||(i>k));//false||false
        System.out.println((i<j)||(i>k));//true||false
        System.out.println((i>j)||(i<k));//false||true
        System.out.println((i<j)||(i<k));//true||true
        System.out.println("---------");
        //&和&&
        System.out.println((i++>100)&(j++>100));//false&false
        System.out.println("i1:"+i);
        System.out.println("j1:"+j);
        System.out.println((i++>100)&&(j++>100));//false&false
        System.out.println("i2:"+i);
        System.out.println("j2:"+j);

    }
}

最常用的逻辑运算符:&&,||,!

6.三元运算符

  • 格式:关系表达式?表达式1:表达式2;
  • 范例:a>b?a:b;

计算规则:

首先计算关系表达式的值,如果值为true,表达式1的值就是运算结果,如果值为false,表达式2的值就是运算结果。

public class OperatorDemo09 {
    public static void main(String[] args){
        //定义两个变量
        int a=10;
        int b=20;
        //获取两个数据中较大的值
        int max=a>b?a:b;
        //输出结果
        System.out.println("max:"+max);
    }
}

案例1:两只老虎

需求:动物园里有两只老虎。已知两只老虎的体重分别为180 kg、200 kg,请用程序实现判断两只老虎的体重是否相同。

public class TwoTiger {
    public static void main(String[] args){
        //定义两个变量保存老虎的体重,单位为kg
        int Tiger1=180;
        int Tiger2=200;
        //用三元运算符实现老虎体重的判断
        boolean a=(Tiger1==Tiger2)?true:false;
        //输出结果
        System.out.println(a);
    }
}

案例2:三个和尚

需求:一座寺庙里住着三个和尚,已知他们的身高分别为150 cm、210 cm、165 cm,请用程序获取这三个和尚的最高身高。

public class ThreeMonks {
    public static void main(String[] args){
        //定义三个变量保存三个和尚的身高,单位为 cm
        int Monk1=150;
        int Monk2=210;
        int Monk3=165;
        //用三元运算符做比较
        int max1=Monk1>Monk2?Monk1:Monk2;
        int max=max1>Monk3?max1:Monk3;
        //输出结果
        System.out.println(max);
    }
}
posted @ 2022-03-30 17:08  行雨  阅读(170)  评论(0编辑  收藏  举报