JAVA语言语法_运算符(part2)

JAVA语言语法

二、运算符
1、JAVA中的运算符概述

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

在这里插入图片描述

2、算术运算符&除法、取余

​ 算术运算符:

在这里插入图片描述

除法、取余:

package com.rucoding.d4;
/**
 * @author LiuYiXin
 * 算术运算符: + - *  /  %   前 ++ 后++ ,前-- 后--
 */
public class SuanShuDemo01 {
	public static void main(String[] args) {
		// / % 前 ++ 后++ ,前-- 后--
		//①.除号 /
		int num1 = 12;
		int num2 = 5;
		int result1 = num1 / num2;
//		System.out.println(result1); //2 ,int为整型,截断操作
		int result2 = num1 / num2 * num2;
//		System.out.println(result2); //10
		double result3 = num1 / num2; //int类型运算,还是int整型
//		System.out.println(result3);
		double result4 = num1 / num2 + 0.0; //2.0,此时是先进行除法运算
		double result5 = num1 / (num2 + 0.0); //括号内提升为double类型,运算结果自然是double类型,2.4
		double result6 = (double)(num1 / num2); //2.0
		double result7 = (double)num1 / num2; //2.4
		double result8 = num1 / (double)num2; //2.4
	
		//②. 取余运算
		//使用场景: 开发中,经常使用取模%来判断能否被除尽的情况。
		//结果的符号与被模数的符号相同
		int m1 = 12;
		int n1 = 5;
		System.out.println("被模数m1 取模% n1 =" + (m1 % n1));
		
		int m2 = -12;
		int n2 = 5;
		System.out.println("被模数m2 取模% n2 =" + (m2 % n2));
		
		int m3 = 12;
		int n3 = -5;
		System.out.println("被模数m3 取模% n3 =" + (m3 % n3));
		
		int m4 = -12;
		int n4 = -5;
		System.out.println("被模数m4 取模% n4 =" + (m4 % n4));
	}
}
3、算术运算符&加号

​ 加号应用场景:

​ (1)、表示正数,+5 即是 5;

​ (2)、相加操作:数学加法运算,例如 5 + 6;

​ (3)、字符串的拼接: +左右两侧的任意一侧有字符串,那么这个加号就是字符串拼接的作用,结果一定是字符串。

知识点1: 大小写字母和数字的ASCII码值: a-z:97-122,A-Z:65-90,0-9:48-57。(记住吧)

代码演示:

package com.rucoding.d4;
/**
 * @author LiuYiXin
 *
 */
public class SuanShuAddDemo01 {
	public static void main(String[] args) {
		//算术运算符的加号
		//①.表示正数
		System.out.println(+5);
		//②.相加操作
		System.out.println(5 + 6);
		System.out.println(5 + '6'); //单引号字符,此时加号是运算操作,'6'会被转义为54 ,结果为59
		//温馨提示: 大小写字母和数字的ASCII码值:a-z:97-122,A-Z:65-90,0-9:48-57。(记住吧)
		//③.字符串的拼接: +左右两侧的任意一侧有字符串,那么这个加号就是字符串拼接的作用,结果一定是字符串
		int num = 56;
		System.out.println("num = " + num); //"num =56" ==> num = 56
		System.out.println(5 + 6 + "7"); //117
		System.out.println(5 + '6' + "7"); //597
		System.out.println("5" + 6 + "7");//567
		System.out.println("5" + '6' + "7");//567
		System.out.println("5"+ '6' + '7');//567
		System.out.println('5'+ '6' + '7');//162
	}
}
4、算术运算符&自增
(前) ++ : 先自增1,后进行运算
(后) -- : 先进行运算,后自增1
(前) -- : 先自减1,后进行运算
(后) -- : 先进行运算,后自减1

记住点:自增1不会改变本身变量的数据类型!
package com.rucoding.d4;
/**
 * @author LiuYiXin
 *
 */
public class SeflAddDemo01 {
	public static void main(String[] args) {
		//(前) ++ : 先自增1,后进行运算
		//(后) -- : 先进行运算,后自增1
		int a1 = 10;
		int b1 = ++a1; //前++ 先拿自增+的结果 为11
		System.out.println("a1 = " + a1 + ",b1 = " + b1); //11,11
		
		int a2 = 10;
		int b2 = a2++; //后++ 
		System.out.println("a2 = " + a2 + ",b2 = " + b2); //11,10
		
		int a3 = 10;
		++a3; //a3++;
		int b3 = a3;
		System.out.println("b3 = " + b3);
		
		//划重点了
		short s1 = 10;
//		s1 = s1 + 1; //编译不通过, 1默认的类型int类型,自动提升为int
		s1 =(short)(s1 + 1);//Change type of 's1' to 'int' 或者 Add case to 'short'(这里选择的)
		s1++; //自增1不会改变本身变量的数据类型哦!!!
		System.out.println("s1 = " + s1);
		
		//引申
		byte bb1 = 127;
		bb1++;
		System.out.println("bb1 = " + bb1); //-128
		
		//(前) -- : 先自减1,后进行运算
	    //(后) -- : 先进行运算,后自减1
		int a4 = 10;
		int b4 = a4--;//int b4 = --a4
		System.out.println("a4 = " + a4 + ",b4 = " + b4); //9,10
		
	}
}
5、赋值运算符
赋值运算符:=  +=  -=  *=  /=  %=

代码演示:

package com.rucoding.d4;
/**
 * @author LiuYiXin
 * 赋值运算符: =  +=  -=  *=  /=  %= 
 */
public class SetValueDemo01 {
	//赋值运算符	
	public static void main(String[] args) {
		//赋值符号, =
		int i1 = 10;
		int j1 = 10;
		
		int i2,j2;
		//连续赋值
		i2 = j2 = 10;
		int i3 = 10 , j3 = 10;
		
		//
		int num1 = 10;
		num1 += 2; //num1 = num1 + 2;
		System.out.println("num1 = " + num1);
		
		int num2 = 12;
		num2 %= 5;// num2 = num2 % 5;
		System.out.println("num2 = " +num2);
		
		short s1 = 10;
//		s1 = s1 + 2;//编译肯定不过
		s1 += 2;//编译可以通过. 表明不会改变变量本身的数据类型
		System.out.println("s1 = " + s1);
		
		//实际应用开发中,如果使用变量实现+2的操作,有哪些方式
		//方式一: num = num + 2;
		//方式二: num += 2;(推荐)
		
		//实际应用开发中,如果使用变量实现+1的操作,有哪些方式
		//方式一: num = num + 1;
		//方式二: num += 1;
		//方式三: num++; ((推荐))
			
	}
}
6、算术运算符练习题
//练习1
	int i = 1;
	i *= 0.1;// *= 赋值 不会改变变量本身的数据类型的
	System.out.println("i = " + i);//0
	i++;
	System.out.println(i);//1
	
//练习2
	int m = 2;
	int n = 3;
	n *= m++;// n = n * m++
	System.out.println("m=" + m);//3
	System.out.println("n=" + n);//6
	
//练习3
	int n1 = 10;
	n1 += (n1++) + (++n1); //n1 = n1 +  (n1++) + (++n1) = 10 + 10(此时自增1,变11)+12=32
	System.out.println(n1);//32
//练习4
	//随意给出一个4位整数,打印显示它的个位数、十位数、百位数、千位数的值
	int num4 = 2893;
	System.out.println("个位数: " + (num4 % 10));
	System.out.println("十位数: " + (num4 % 100 / 10));
	System.out.println("百位数: " + (num4%1000/100));
	System.out.println("千位数: " + (num4/1000));
7、比较运算符

在这里插入图片描述

码上见:

package com.rucoding.d4;

/**
 * @author LiuYiXin
 *
 */
public class CompareDemo01 {
	public static void main(String[] args) {
		//比较运算符
		int i = 10;
		int j = 20;
		
		System.out.println(i == j);//false
		System.out.println(i = j); //赋值操作 20
		
		boolean b1 = true;
		boolean b2 = false;
		System.out.println(b2 == b1); //false
		System.out.println(b2 = b1); //true
	}
}

小结: 比较运算符的结果是boolean类型,true 或者 false。注意区分 == 判断等于 ,=赋值操作。

8、逻辑运算符

在这里插入图片描述

逻辑与&、短路与&&(或者称之为单与,双与)、逻辑或|、短路或||(或者称之为单或、双或)。

逻辑与&、短路与&&,逻辑或|、短路或|| 区别

package com.rucoding.d4;
/**
 * @author LiuYiXin
 *
 */
public class LogicDemo01 {
	public static void main(String[] args) {
		//逻辑运算符 &—逻辑与  |—逻辑或  !—逻辑非   &&—短路与   ||—短路或   ^—逻辑异或
		//逻辑运算符操作的都是boolean的变量
		
		//①.& 逻辑与 && 短路与 (短路)
		//相同点: &、&& 的最终运行结果是相同的,两边都为true的时候结果才会为true
		//相同点: 当左边为true的时候, &、&&单双与 都会执行右边的运算。
		//不同点: 当左边为false的时候,&单与会继续执行右边的运算, &&双与(即短路与)不会执行右边的运算
		//实际开发中,推荐使用&&
		boolean b1 = true;
		b1 = false;
		int num1 = 10;
		if(b1 & (num1++ > 0)){
			System.out.println("我现在在北京");
		}else{
			System.out.println("我现在在南京");
		}
		
		System.out.println("num1 = " + num1);
		
		boolean b2 = true;
		b2 = false;
		int num2 = 10;
		if(b1 && (num2++ > 0)){
			System.out.println("我现在在北京");
		}else{
			System.out.println("我现在在南京");
		}
		System.out.println("num2 = " + num2);
		
		//②.| 逻辑或  || 短路或 (短路)
		//相同点: |、|| 逻辑或、短路或 最终运算结果都是相同的,有一个为true,结果为true
		//相同点: 当左边运算结果是false的时候,无论逻辑或|、短路或 ||两边都会执行右边运算
		//不同点: 当左边运行结果为true的时候, 逻辑或| 会继续执行右边的运算, 短路或||不会执行右边的运算
		//实际开发中,推荐使用||短路或
		boolean b3 = false;
		b1 = true;
		int num3 = 10;
		if(b3 | (num3++ > 0)){
			System.out.println("我现在在北京");
		}else{
			System.out.println("我现在在南京");
		}
		
		System.out.println("num3 = " + num3);
		
		boolean b4 = false;
		b4 = true;
		int num4 = 10;
		if(b4 || (num4++ > 0)){
			System.out.println("我现在在北京");
		}else{
			System.out.println("我现在在南京);
		}
		System.out.println("num4 = " + num4);
			
	}
}

小结:

在这里插入图片描述

9、逻辑运算符练习题

代码演示:

package com.rucoding.d4;

/**
 * @author LiuYiXin
 *
 */
public class LogicDemo02 {
	public static void main(String[] args) {
		//练习1
		int xx1 = 1;
		int yy1 = 1;
		if(xx1++ == 2 & ++yy1 == 2){
			xx1 = 7;
		}
		System.out.println("xx1=" + xx1 + ",yy1=" + yy1); //2,2
		
		//练习2
		int x1 = 1;
		int y1 = 1;
		if(x1++ == 2 && ++y1 ==2){
			x1 = 7;
		}
		System.out.println("x1=" + x1 + ",y1=" + y1); //2,1
		
		//练习3
		int x2 = 1;
		int y2 = 1;
		if(x2++ == 1 | ++y2 ==1){
			x2 = 7;
		}
		System.out.println("x2=" + x2 + ",y2=" + y2);//7,2
		
		//练习4
		int x3 = 1,y3 = 1;
		if(x3++ == 1 || ++y3 == 1){
			x3 = 7;
		}
		System.out.println("x3=" + x3 + ",y3=" +y3);//7,1
		
		//综合练习
		boolean x = true;
		boolean y = false;
		short z = 42;
//		if(y == true)
		if((z++ == 42) && (y = true)) z++; //44
		if((x = false) || (++z == 45)) z++;//46
		System.out.println("z=" + z);
	}
}
10、三元运算符

三元(三目)运算符描述:

在这里插入图片描述

代码演示:

package com.rucoding.d4;

/**
 * @author LiuYiXin
 *
 */
public class SanYuanDemo01 {
	public static void main(String[] args) {
		//三元运算符。结构: (条件表达式) ? 表达式1 : 表达式2
		//说明: 条件表达式的结果为boolean类型
		//①.根据条件表达式的真或假,决定执行 表达式1 还是 表达式2 (条件表达式结果为true 执行 表达式1 ,否则,执行 表达式2)
		//②.表达式1 和 表达式2 返回结果是可以接收的同一类型。
		//③.三元运算符可以嵌套使用
		
		//1、获取两个整数的较大值
		int m = 12;
		int n = 5;
		int max = (m > n) ? m : n;
		System.out.println(max);
		
		double num = (m > n) ? 2 : 1.0;//
		System.out.println(num);
		
		//嵌套使用
		n = 12;
		String result = (m > n) ? "m大" : (m == n) ? "m和n相等" : "n大";
		System.out.println(result);
		
		//2、获取三个数中最大值
		int n1 = 12;
		int n2 = 30;
		int n3 = -24;
		
		int maxOne = (n1 > n2) ? n1 : n2;
		maxOne = (maxOne > n3) ? maxOne : n3;
		System.out.println(maxOne);
		
		//改写成 if-else
		if(m > n){
			System.out.println("m大");
		}else{
			System.out.println("n大");
		}
		
		//改写成 if-else
		if(n1 > n2){
			if(n1 > n3){
				System.out.println("n1最大");
			}else{
				System.out.println("n3最大");
			}
		}else{
			if(n2 > n3){
				System.out.println("n2最大");
			}else{
				System.out.println("n3最大");
			}
		}
	}
}
11、位运算符(了解)

在这里插入图片描述

结论:

1. 位运算符操作的都是整型的数据
2. << :在一定范围内,每向左移1位,相当于 * 2
   >> :在一定范围内,每向右移1位,相当于 / 2
面试题:最高效方式的计算2 * 8 ?  2 << 3  或 8 << 1
貌似可以解释一下这个问题: 2 表示的二进制 ...010 ,此时向左移动 3 位, 即 ...010 000 (向左移动3位,补上2位) ,结果即是2^4=16。

代码演示:

package com.rucoding.d4;

/**
 * @author LiuYiXin
 *
 */
public class BinaryDemo01 {
	public static void main(String[] args) {
		int i = 21;
		i = -21;
		System.out.println("i << 2 为 " + (i << 2));
		System.out.println("i << 3 为 " + (i << 3));
		System.out.println("i << 27 为 " + (i << 27));
		
		int m = 12;
		int n = 5;
		System.out.println("m & n 为 " + (m & n));
		System.out.println("m | n 为 " + (m | n));
		System.out.println("m ^ n 为 " + (m ^ n));
		
		//练习: 交换两个变量的值
		int num1 = 10;
		int num2 = 20;
		//方式一: 定义临时变量;通用的数据类型, 推荐使用的
		int temp = num1;
		num1 = num2;
		num2 = temp;
		System.out.println("num1 = " + num1 + ",num2 = " +num2);
		//方式二: 这个弊端,相加的操作数可能会超出存储范围 ; 局限性,只能适用于数字 (数值)类型
//		num1 = num1 + num2;
//		num2 = num1 - num2;
//		num1 = num1 - num2;
//		System.out.println("num1 = " + num1 + ",num2 = " +num2);
		//方式三: 使用位运算符
		//弊端: 只能适用于数字(数值)类型
//		num1 = num1 ^ num2;
//		num2 = num1 ^ num2;
//		num1 = num1 ^ num2;
//		System.out.println("num1 = " + num1 + ",num2 = " +num2);
		
	}
}
12、运算符&总结
按照如下思维导图,进行回顾并补充。

在这里插入图片描述

13、运算符的优先级别(了解)
  • 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如表,上一行运算符总优先于下一行。

  • 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java智慧阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值