运算符

运算符

运算符和表达式

int a = 10;
int b = 20;
int c = a + b;

+:运算符,并且是算术运算符

a + b:表达式,由于+是算术运算符,所以这个表达式叫算术表达式

算术运算符

符号

符号 作用
+
-
*
/
% 取模、取余
public class ArithmeticoperatorDemo1 {
    public static void main(String[] args) {
        //+
        System.out.println(3 + 2);//5
        //-
        System.out.println(5 - 1);//4
        //*
        System.out.println(7 * 9);//63

        //如果在运算的时候有小数参与
        //结论:
        //在代码中,如果有效数参与,结果有可能不精确的。
        System.out.println(1.1 + 1.1);//2.2
        System.out.println(1.1 + 1.01);//2.1100000000000003

        //除法
        //结论:
        //1.整数参与计算,结果只能得到整数
        //2.小数参与计算,结果有可能是不精确的
        System.out.println(10 / 2);//5
        System.out.println(10 / 3);//3
        System.out.println(10.0 / 3);//3.3333333333333335

        //取模、取余。实际上也是做除法运算,只不过得到的是余数而已。
        System.out.println(10 % 2);//0
        System.out.println(10 % 3);//1
        
        //应用场景:
        //1.可以用取模判断,A是否可以被B整除
        //A % B    10 % 3
        //2.可以判断A是否为偶数
        //A % 2 如果结果为0,那么证明A是一个偶数。如果结果为1,那么证明A是一个奇数
        //3.斗地主发牌
        //三个玩家
        //把每一张牌都定义一个序号
        //拿着序号 % 3 如果结果为1,就发给第一个玩家
        //如果结果为2,那么就发给第二个玩家
        //如果结果为0,那么就发给第三个玩家

    }
}

练习--数值拆分

需求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台

公式总结:

  • 个位:数值 % 10
  • 十位:数值 / 10 % 10
  • 百位:数值 / 100 % 10
  • 千位:数值 / 1000 % 10
  • ...
import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        //键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台

        //1.键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个三位数");
        int number = sc.nextInt();

        //2.获取个位,十位,百位
        //公式:
        //个位:  数字 % 10
        //十位:  数字 / 10 % 10
        //百位:  数字 / 10 / 10 % 10
        //...
        int ge = number % 10;
        int shi = number / 10 % 10;
        int bai = number / 100 % 10;
        System.out.println(ge);
        System.out.println(shi);
        System.out.println(bai);
    }
}

数字相加

数字相加

数字进行运算时,数据类型不一样不能运算,需要转成一样的,才能运算。

类型转换的分类

  1. 隐式转换(自动类型提升)

    • 取值范围的数值-->取值范围的数值

    • //范例: 
      int a = 10;
      double b = a;//b = 10.0
      

      取值范围:double>float>long>int>short>byte

    • 隐式转换的两种提升规则

      • 取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算

      • byte、short、char 三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算

        public class Test {
            public static void main(String[] args) {
                int a = 10;//取值范围小
                double b = 12.3;//取值范围大
                
                double c = a + b;//+ 取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算
            }
        }
        
        public class Test {
            public static void main(String[] args) {
                byte a = 10;
                byte b = 20;
                
                int c = a + b;//byte、short、char 三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算
            }
        }
        
  2. 强制转换

    • 取值范围的数值-->取值范围的数值(如果把一个取值范围大的数值,赋值给取值范围小的变量。是不允许直接赋值的。如果一定要这么做就需要加入强制转换)

    • 格式:目标数据类型 变量名 = (目标数据类型) 被强转的数据;

      //范例: 
      double a = 12.3;
      int b = (int) a;
      
      //范例: 
      int a = 300;
      byte b = (byte) a;//会出现错误,byte的取值范围是-128~127,300超出取值范围
      
      //范例:
      public class ArithmeticoperatorDemo2 {
          public static void main(String[] args) {
              byte b1 = 10;
              byte b2 = 20;
              //现在要强转的是b1 + b2计算之后的结果。
              //(byte)b1 + b2 强转的是b1,并不是最终的结果
              byte result = (byte) b1 + b2;//错误
              byte result = (byte) (b1 + b2);//正确
              System.out.println(result);//30
          }
      }
      

字符串相加

字符串的“+”操作

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

    会将前后的数据进行拼接,并产生一个新的字符串。

    • "123" + 123//结果是"123123"
      
  • 连续进行“+”操作时,从左到右逐个执行。

    • 1 + 99 +"世界"//结果是"100世界"
      
    //范例:
    int age = 18;
    System.out.println("刚满" + age + "岁");//"刚满18岁"
    System.out.println("刚满" + "age" + "岁");//"刚满age岁"
    
    //范例:
    System.out.println(1 + 2 + "abc" + 2 + 1);//"3abc21"
    
练习:数值拆分

需求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台

import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        //键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台

        //1.键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个三位数");
        int number = sc.nextInt();

        //2.获取个位,十位,百位
        //公式:
        //个位:  数字 % 10
        //十位:  数字 / 10 % 10
        //百位:  数字 / 10 / 10 % 10
        //...
        int ge = number % 10;
        int shi = number / 10 % 10;
        int bai = number / 100 % 10;
        System.out.println("个位是" + ge);
        System.out.println("十位是" + shi);
        System.out.println("百位是" + bai);
    }
}

字符相加

  • 字符 + 字符字符 + 数字 时,会把字符通过ASCLL码表查询到对应的数字再进行计算。

    //范例:
    System.out.println(1 + 'a');//98
    System.out.println('a' + "abc");//"aabc"
    

自增自减运算符

基本用法

符号 作用 说明
++ 变量的值加1
-- 变量的值减1
  • 注意事项:++和--既可以放在变量的前面,也可以放在变量的后面

    int a = 10;
    a++;//(++a;)后加加(先加加),表示将变量里面得值加1
    System.out.println(a);//11
    

    单独使用(用法一):++和--无论是放在变量的前边还是后边,单独写一行结果都是一样的

    //范例:
    public class ArithmeticoperatorDemo3 {
        public static void main(String[] args) {
            //++ 和 --
            int a = 10;
            //表示把变量a里面的值+1
            a++;
            System.out.println(a);//11
            //表示把变量a里面的值+1
            ++a;
            System.out.println(a);//12
            //表示把变量a里面的值-1
            a--;
            System.out.println(a);//11
            //表示把变量a里面的值-1
            --a;
            System.out.println(a);//10
        }
    }
    

应用场景一:

一岁-->生日后-->两岁

int age = 1;
age++;
System.out.println(age);

应用场景二:

购买物品增减购买数量时

- 2 +

应用场景三:数¥号

& &
++ ++ ++

参与计算(用法二):

  1. 先用后加

    int a = 10;
    int b = a++;//a=11,b=10
    
  2. 先加后用

    int a = 10;
    int b = ++a;//a=11,b=11
    

练习

public class ArithmeticoperatorDemo4 {
    public static void main(String[] args) {
        int x = 10;
        //后++:先用后加
        int y = x++;
        //先++:先加后用
        int z = ++x;
        System.out.println("x:" + x);//12
        System.out.println("y:" + y);//10
        System.out.println("z:" + z);//12
    }
}

赋值运算符

分类

符号 作用 说明
= 赋值 int a = 10,将10赋值给变量a
+= 加后赋值 a+ = b,将a+b的值给a
-= 减后赋值 a -= b,将a-b的值给a
*= 乘后赋值 a *= b,将a×b的值给a
/= 除后赋值 a /= b,将a÷b的商给a
%= 取余后赋值 a %=b,将a÷b的余数给a

注意事项:+=,-=,*=,/=,%= 底层都隐藏了一个强制类型转换

//范例:
public class ArithmeticoperatorDemo1 {
    public static void main(String[] args) {
        //+=
        //规则:将左边和右边进行相加,然后再把结果赋值给左边
        int a = 10;
        int b = 20;
        a += b;//等同于 a = (int) (a + b);
        System.out.println(a);
        System.out.println(b);


        //细节:
        //+=,-=,*=,/=,%= 底层都隐藏了一个强制类型转换
        short s = 1;
        s += 1;//等同于:s = (short) (s + 1);
        System.out.println(s);//2
    }
}

关系运算符

(关系运算符/比较运算符)的分类

符号 说明
== a==b,判断a和b的值是否相等,成立为true,不成立为false
!= a!=b,判断a和b的值是否不相等,成立为true,不成立为false

|a>b,判断a是否大于b,成立为true,不成立为false
=|a>=b,判断a是否大于等于b,成立为true,不成立为false
<|a<b,判断a是否小于b,成立为true,不成立为false
<=|a<=b,判断a是否小于等于b,成立为true,不成立为false
注意事项:

  1. 关系运算符的结果都是boolean类型,要么是true,要么是false。
  2. 千万不要把“==”误写成“=”。
//范例:
public class CompareoperatorDemo1 {
    public static void main(String[] args) {
        //== 判断左右两边是否相等
        int a = 10;
        int b = 10;
        int c = 20;
        System.out.println(a == b);//true
        System.out.println(a == c);//false
    }
}

练习--约会

需求:

您和您的约会对象在餐厅里面正在约会。

键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他)

如果你的时髦程度大于你对象的时髦程度,相亲就成功,输出true。

否则输出false。

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        /* 需求:
         您和您的约会对象在餐厅里面正在约会。
         键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他)
         如果你的时髦程度大于你对象的时髦程度,相亲就成功,输出true。
         否则输出false。*/

        //1.键盘录入两个整数表示衣服的时髦度
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入我们自己的衣服时髦度");
        int myFashion = sc.nextInt();
        System.out.println("请输入相亲对象衣服的时髦度");
        int girlFashion = sc.nextInt();

        //2.把我衣服的时髦度跟女孩的时髦度进行对比
        boolean result = myFashion > girlFashion;

        //3.打印结果
        System.out.println(result);
    }
}

逻辑运算符

  • 在数学中,一个数据x,大于5,小于15,表示成:5<x<15。
  • 在Java中,需要把上面的式子先进行拆解,在进行合并表达。
    • 拆解为:x>5x<15
    • 合并后:x>5 & x<15(&:并且)

分类

符号 作用 说明
& 逻辑(且) 并且,两边都为真,结果才是真(两边都要满足)
| 逻辑或 或者,两边都为假,结果才是假(两边满足一个)
^ 逻辑异或 相同为false,不同为true
! 逻辑非 取反
//范例"&""|"":
public class LogicoperatorDemo1 {
    public static void main(String[] args) {
        //1. & 并且
        //两边都为真,结果才是真
        System.out.println(true & true);//true
        System.out.println(false & false);//false
        System.out.println(true & false);//false
        System.out.println(false & true);//false


        //2. | 或者
        //两边都为假,结果才是假
        System.out.println(true | true);//true
        System.out.println(false | false);//false
        System.out.println(true | false);//true
        System.out.println(false | true);//true
    }
}

使用场景一

输入用户名和密码时,成功登陆的条件是:

用户名正确 并且 密码正确

使用场景二

结婚时女方要求要有

房子 或者 车子;(房子 并且 车子)

//范例"^""!":
public class LogicoperatorDemo2 {
    public static void main(String[] args) {
        // ^ 异或
        //相同为false,不同为true
        System.out.println(true ^ true);//false
        System.out.println(false ^ false);//false
        System.out.println(true ^ false);//true
        System.out.println(false ^ true);//true


        // ! 逻辑非 取反
        //提示:
        //取反的感叹号不要写多次,要么不写,要么只写一次
        System.out.println(!false);//true
        System.out.println(!true);//false
    }
}

短路逻辑运算符

符号 作用 说明
&& 短路与 结果和&相同,但是有短路效果
|| 短路或 结果和|相同,但是有短路效果
//范例:
public class LogicoperatorDemo3 {
    public static void main(String[] args) {
        //1.&&
        //运行结果跟单个&是一样的
        //表示两边都为真,结果才是真
        System.out.println(true && true);//true
        System.out.println(false && false);//false
        System.out.println(false && true);//false
        System.out.println(true && false);//false


        //2.||
        //运行结果跟单个|是一样的
        //表示两边都为假,结果才是假
        System.out.println(true || true);//true
        System.out.println(false || false);//false
        System.out.println(false || true);//true
        System.out.println(true || false);//true


        //3.短路逻辑运算符具有短路效果
        //简单理解:当左边的表达式能确定最终的结果,那么右边就不会参与运行了
        int a = 10;
        int b = 10;
        boolean result = ++a < 5 && ++b < 5;
        System.out.println(result);//false
        System.out.println(a);//11
        System.out.println(b);//10
    }
}
  • 注意事项:

    • &|,无论左边 true false,右边都要执行。

      &&||,如果左边能确定整个表达式的结果,右边不执行

      &&:左边为false,右边不管是真是假,整个表达式的结果一定是false。

      ||:左边为true,右边不管是真是假,整个表达式的结果一定是true。

      这两种情况下,右边不执行,提高了效率。

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

练习--数字6

需求:

数字6是一个真正伟大的数字,键盘录入两个整数。

如果其中一个为6,最终结果输出true。

如果他们的和为6的倍数。最终结果输出true。

其他情况都是false。

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        /*数字6是一个真正伟大的数字,键盘录入两个整数。
        如果其中一个为6,最终结果输出true。
        如果他们的和为6的倍数。最终结果输出true。
        其他情况都是false。*/

        //分析:
        //1.键盘录入两个整数
        // 变量a  变量b

        //2.a == 6 || b == 6 || (a + b) % 6 = 0
        //如果满足其中一个,那么就可以输出true


        //键盘录入两个整数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int number1 = sc.nextInt();
        System.out.println("请输入第二个整数");
        int number2 = sc.nextInt();

        //用短路逻辑运算符去链接三个判断
        boolean result = number1 == 6 || number2 == 6 || (number1 + number2) % 6 == 0;

        System.out.println(result);
    }
}

三元运算符

三元运算符

需求:定义一个变量记录两个整数的较大值。

int number = 拿着两个整数进行比较
System.out.println(number);

作用:可以进行判断,根据判断结果得到不同的内容

格式(三元运算符/三元表达式)

  • 格式:关系表达式 ? 表达式1 : 表达式2;

  • 范例:求两个数的较大值。

    int max = a > b ? a : b;//把三元运算符的结果赋值给一个变量
    System.out.println(a > b ? a : b);//把三元运算符的结果直接打印
    
//范例:
public class TernaryoperatorDemo1 {
    public static void main(String[] args) {
        //需求:使用三元运算符,获取两个数的较大值

        //分析:
        //1.定义两个变量记录两个整数
        int number1 = 10;
        int number2 = 20;

        //2.使用千元运算符获取两个整数的较大值
        //格式:关系表达式 ? 表达式1 : 表达式2;
        //整个三元运算符的结果必须要使用

        int max = number1 > number2 ? number1 : number2;
        System.out.println(max);

        System.out.println(number1 > number2 ? number1 : number2);
    }
}
  • 计算规则
    • 首先计算关系表达式的值
    • 如果值为true表达式1的值就是运算结果
    • 如果值为false表达式2的值就是运算结果

练习1--两只老虎

需求:

动物园里有两只老虎,体重分别通过键盘录入获得,

请用程序实现判断两只老虎的体重是否相同。

import java.util.Scanner;

public class Test4 {
    public static void main(String[] args) {
        /*需求:动物园里有两只老虎,体重分别通过键盘录入获得,
        请用程序实现判断两只老虎的体重是否相同。*/

        //分析:
        //1.键盘录入两只老虎的体重
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一纸老虎的体重");
        int weight1 = sc.nextInt();
        System.out.println("请输入第二纸老虎的体重");
        int weight2 = sc.nextInt();
        //2.比较
        //相同  不同

        String result = weight1 == weight2 ? "相同" : "不同";
        System.out.println(result);
    }
}

练习2--求最高身高的和尚

需求:

一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,

请用程序实现获取这三个和尚的最高身高。

public class Test5 {
    public static void main(String[] args) {
        /*需求:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,
        请用程序实现获取这三个和尚的最高身高。*/


        //1.定义三个变量记录三个和尚的身高
        int height1 = 150;
        int height2 = 210;
        int height3 = 165;
        //2.拿着第一个和尚和第二个和尚进行比较
        //再拿着结果跟第三个和尚进行比较即可
        int temp = height1 > height2 ? height1 : height2;
        int max = temp > height3 ? temp : height3;

        System.out.println(max);
    }
}

运算符优先级

优先级 运算符
1 .(){}
2 !、-、++、--
3 *、/、%
4 +、-
5 <<、>>、>>>
6 <、<=、>、>=、instanceof
7 ==、!=
8 &
9 ^
10 |
11 &&
12 ||
13 ? :
14 =、+=、-=、*=、/=、%=、&=

热门相关:美食供应商   万道龙皇   扑倒老公大人   我的黑月光女友   孽徒快坑师