运算符运算符和表达式

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');//98System.out.println('a' + "abc");//"aabc"

自增自减运算符基本用法

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

    int a = 10;a++;//(++a;)后加加(先加加),表示将变量里面得值加1System.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=、+=、-=、*=、/=、%=、&=