侧边栏壁纸
博主头像
青菜-halo2 博主等级

行动起来,活在当下

  • 累计撰写 74 篇文章
  • 累计创建 6 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Java-运算符

Administrator
2025-05-29 / 0 评论 / 0 点赞 / 20 阅读 / 0 字

运算符

运算符:对字面量或者变量进行操作的符号

表达式:用运算符把字面量或者变量连接起来,符合java语法的式子就可以陈伟表达式。不同运算符连接的表达式体现的是不同类型的表达式

1、算数运算符

加( + )、减( - )、乘( * )、除( / )、取模( % )

"+" 操作的三种情况

1.1 数字相加

1.1.1 隐式转换
/*
数字相加: 数字进行运算时,数据类型不一样不能运算,需要转成一样的,才能运算
    数据类型的转换:
        隐式转换(自动类型提升): 数据类型不一样,不能进行运算,需要转成一样的才可以进行运算
            规则:
                取范围小的与取值范围大的进行运算,小的会先提升为大的,再进行运算
                byte short char 三种类型的数据在运算的时候,会先提升为 int ,再进行运算
            大小关系:
                byte < short < int < long < float < double
            范例:
                int a = 10;
                double b = a;
                System.out.println(b); //10.0 , b为double类型
​
                int a = 10;
                double b = 12.3;
                c = a + b; //c为double类型
​
                byte a = 10;
                byte b = 20;
                c = a + b; // c为int类型
*/
​
// 请问最终的运算结果是什么类型的
byte b1 = 10;
byte b2 = 20;
result = b1 + b2; // result 数据类型为 int (byte -> int)
​
int i = 10;
long n = 100L;
double d = 20.0;
result = i + n + d; // result 数据类型为 double (int -> lone -> double)
​
byte b = 10;
short s = 20;
long n = 100L;
result = b + s + n; // result 数据类型为  long (byte,short -> int -> long)
1.1.2 强制转换
/*
强制转换:
    格式:目标数据类型  变量名 = (目标数据类型)被强转的数据;
    int a = 300;
    byte b = (byte) a;
*/
​
// 练习
public class ArithmeticoperatorDemo3 {
    public static void main(String[] args){
        byte b1 = 10;
        byte b2 = 20;
        //int result = b1 + b2;
        byte result = (byte)(b1 + b2);
        System.out.println(result); // 30
    }
}

1.2 字符串相加

/*
字符串 "+" , 对字符串进行 拼接
连续 "+" 时,从左到右逐个执行
*/
​
//练习
System.out.println(3.7 + "abc"); // "3.7abc"
System.out.println("abc" + true); // "abctrue"
System.out.println('中' + "abc" + true); // "中abctrue"
​
int age = 18;
System.out.println("我的年龄是" + age + "岁"); // 我的年龄是18岁
System.out.println("我的年龄是" + "age" + "岁"); // 我的年龄是age岁
​
System.out.println(1 + 2 + "abc" + 2 + 1); // "3abc21"
​
​
/*
数值拆分
需求:键盘录入一个三位数,将其拆分为个、十、百位,打印在控制台中
在之前的 Test1 中输出部分新增字符串拼接
*/
​
package com.yq.test;
​
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
            百位:数字 / 100 % 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.3 字符相加

/*
字符 + 操作
    字符 + 字符(数字):会把字符通过 ASCII码表 查询到对应的数字再进行计算
*/
​
//练习
System.out.println(1 + 'a'); // 1+97
System.out.println('a' + "abc"); // "aabc"

符号

作用

说明

+

加法运算

-

减法运算

*

乘法运算 * == X

/

除法运算 / == %

%

取模、取余

两个数做除法的余数

注意事项:

/ 和 % 区别:两个数据做除法, / 取结果的商,%取结果的余数
整数操作只能得到整数,要想得到小数,必须要有浮点数参与计算
​

2、自增自减运算符

符号

作用

说明

++

变量的值加1

--

变量的值减1

2.1 单独使用

/*
++ 和 -- 无论放在变量的前还是后,单独写一行结果是一样的
a++ <==> ++a
a-- <==> --a
*/
​
package com.yq.arithmeticoperator;
​
public class ArithmeticoperatorDemo5 {
    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
    }
}
​
// 应用场景1:年龄 +1
int age = 1;
age++;
System.out.println(age);
​
// 应用场景2:购物数量 +1
// 应用场景3:人物数量 +1
​

2.2 参与计算

// 先用后加
int a = 10;
int b = a++;
System.out.println(b); //10
​
// 先加后用
int a = 10;
int b = ++a;
System.out.println(b); //11
​
​
// 练习
public class Test {
    public static void main(String[] args){
        int x = 10;
​
        //后++,先用后加,先把x变量中的值拿出来用,赋值给y,然后再进行自增
        //赋值给y的值是自增前的
        int y = x++; // x=11 y=10
​
        //先++,先加后用,先把x进行自增,然后把自增后的结果赋值给左边的变量
        // 先把x自增,变成12,然后再把自增后的12赋值给z
        int z = ++x; // x=12 z=12
        System.out.println("x:" + x); //12
        System.out.println("y:" + y); //10
        System.out.println("z:" + z); //12
    }
}

3、赋值运算符

符号

作用

说明

=

赋值

int a = 10,将10 赋值给变量a

+=

加后赋值

a+=b,将a+b的值给a

-=

减后赋值

a-=b,将a-b的值给a

*=

乘后赋值

a=b,将ab的值给a

/=

除后赋值

a/=b,将a/b的值给a

%=

取余后赋值

a%=b,将a%b的值给a

注意: 赋值运算符的底层逻辑中,存在一个强制转换

package com.yq.assigningoperator;
​
public class AssigningoperatorDemo1 {
    public static void main(String[] args) {
    // +=
    // 规则:将左边和右边进行相加,然后再把结果赋值给左边    
    int a = 10;
    int b = 20;
    
    // 把a+b,在把结果赋值给左边的变量a
    a += b;
    //等同于 a = (int)(a + b);
    System.out.println(a);
    System.out.println(20);
​
​
    //细节
    // += -= *= /+ %= 底层都隐藏了一个强制类型转换
    short s = 1;
    s += 1;  // short类型运算,会先将short提升为int再进行计算,再此处会再进行short类型转换
    // 等同于: s = (short)(s + 1)
    System.out.println(s);
    }
}
​

4、关系运算符(比较运算符)

符号

说明

==

a==b,a等于b为true,不成立为false

!=

a!=b,a不等于b为true,不成立为true

>

a>b,a大于b为true,不成立为false

>=

a>=b,a大于等于b为true,不成立为false

<

a<b,a小于b为true,不成立为false

<=

a<=b,a小于等于b为true,不成立为false

注意事项: 关系运算符的结果都是 blooean 类型,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);

    }
}

5、逻辑运算符

数学中: 5 < x < 15 java中: x > 5 & x < 15

分类:

符号

作用

说明

&

逻辑与(且)

并且,两边都为真,结果才为真

|

逻辑或

或者,两边都为假,结果才为假

^

逻辑异或

相同为false,不同为true

!

逻辑非

取反

短路逻辑运算符

符号

作用

说明

&&

短路与

结果和 & 相同,但是需要左边成功以后才会执行后面

||

短路或

结果和 |相同,但是只有左边失败以后才会执行右边

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

        int c = 10;
        int d = 10;
        boolean result1 = ++c < 5 & ++d < 5;
        System.out.println(result1); //false
        System.out.println(c); //11
        System.out.println(d); //11
    }
}

练习:

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

        //分析:
        //1.键盘录入两个整数
        // 变量a   变量b
        // 键盘录入两个整数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个整数");
        int number1 = sc.nextInt();
        System.out.println("请输入第二个整数");
        int number2 = sc.nextInt();
        
        //2.a==6 b==6 (a+b)%6==0
        // 如果满足其中一个,那么就可以输出true
        // 设置短路逻辑运算符 连接三个判断
        boolean result = number1 == 6 || number2 == 6 || (number1 + number2) % 6 == 0;
        System.out.println(result);
    }
}

6、三元运算符

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

# (三元运算符/三元表达式)格式
格式: 关系表达式 ? 表达式1 : 表达式2
范例: 求两个数的较大值
int max = a > b ? a : b;
System.out.println(max);
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);
    }
}

练习一: 两只老虎

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.比较
        // true false
        // 相同 不同
        // System.out.println(weight1 == weight2)
        String result  = weight1 == weight2 ? "相同" : "不同";
        System.out.println(result);
    }
}

练习二: 求三个数的最大值

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

        //1.定义三个变量记录三个和尚的身高
        int height1 = 150;
        int height2 = 210;
        int height3 = 165;

        // 2.比较
        int result1 = height1 > height2 ? height1 : height2;
        int result2 = result1 > height3 ? result1 : height3;
        System.out.println(result2);
    }
}

7、运算符优先级

小括号优先于所有

优先级

运算符

1

. () {}

int a = 10;
int b = 20;
int c = 30;
System.out.println(a + b * c);
System.out.println(a + (b * c));

0

评论区