从零开始学JAVA:二、Java基本语法(三)——运算符


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

1、算术运算符

在这里插入图片描述

  • 注意问题:
    • %:取余运算,结果的符号与被模数的符号相同;
    • /:除号,整数除和小数除是有区别的,整数之间做除法时,只
      保留整数部分而舍弃小数部分;
    • +:除字符串相加功能外,还能把非字符串转换成字符串;
    • ++、–:自增/自减,不会改变变量本身的数据类型;
public class Test {
	public static void main(String[] args) {
		
		//除号:/
		int num1 = 12;
		int num2 = 5;
		int result1 = num1 / num2;
		System.out.println(result1);//2
		double result2 = num1 / num2;
		System.out.println(result2);//2.0
		double result3 = (double)num1 / num2;
		System.out.println(result3);//2.4

		// %:取余运算,结果的符号与被模数的符号相同
		int m1 = 12;
		int n1 = 5;
		System.out.println("m1 % n1 = " + m1 % n1);//2
		int m2 = -12;
		System.out.println("m2 % n1 = " + m2 % n1);//-2
		
		//(前)++ :先自增1,后运算
		//(后)++ :先运算,后自增1
		int a1 = 10;
		int b1 = a1++;
		int b2 = ++a1;
		System.out.println("a1 = " + a1 + ",b1 = " + b1 + ",b2 = " + b2);// a1 = 12,b1 = 10,b2 = 12

		byte bb1 =127;
		//bb1 = bb1+ 1;//编译失败
		bb1++;//不会改变变量本身的数据类型
		System.out.println("bb1 = " + bb1);// -128
	}
}

2、赋值运算符

  • 符号: =
    • 当“=”两侧数据类型不一致时, 可以使用自动类型转换或使用强制类型转换原则进行处理。
    • 支持连续赋值。
  • 扩展赋值运算符: +=, -=, *=, /=, %=,不会改变变量本身的数据类型;
public class Test {
	public static void main(String[] args) {
		//赋值符号:=
		int i1 = 10;

		//连续赋值
		int i2,j2;
		i2 = j2 = 10;
		int i3 = 10,j3 = 20;
		//int i4 = j4 = 10;//编译失败
		
		short s1 = 10;
		//s1 = s1 + 2;//编译失败
		s1 += 2;//不会改变变量本身的数据类型
		System.out.println(s1);
	}
}

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

在这里插入图片描述

  • 比较运算符的结果都是boolean型,也就是要么是true,要么是false。
  • 比较运算符“==”不能误写成“=” 。
  • > < >= <= :只能使用在数值类型的数据之间。
  • == 和 !=: 不仅可以使用在数值类型数据之间,还可以使用在其他引用类型变量之间。
public class Test {
	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

		//比较两个Account是否是同一个账户。
		Account acct1 = new Account(1000);
		Account acct2 = new Account(1000);
		boolean b3 = (acct1 == acct2);
	}
}

4、逻辑运算符

&—逻辑与 | —逻辑或 ! —逻辑非 && —短路与 || —短路或 ^ —逻辑异或

  • 逻辑运算符用于连接布尔型表达式,而且结果也是boolean类型;在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
  • “&”和“&&”:
    • &,左边无论真假,右边都进行运算;
    • &&,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
    • & 与 && 的运算结果相同;
    • “|”和“||”的区别同理, ||表示:当左边为真,右边不参与运算。
  • 异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
    • 理解:异或,追求的是“异” !
public class Test {
	public static void main(String[] args) {
		boolean b1 = false;
		int num1 = 10;
		
		if(b1 && (num1++ > 0)){
			System.out.println("我现在在北京");
		}else{
			System.out.println("我现在在南京");
		}
		System.out.println("num1 = " + num1); // 10
		
		if(b1 & (num1++ > 0)){
			System.out.println("我现在在北京");
		}else{
			System.out.println("我现在在南京");
		}
		System.out.println("num1 = " + num1); // 11
	}
}

5、位运算符

运算符运算范例细节
<<左移3 << 2 = 12 --> 3 * 2 * 2=12空位补0,被移除的高位丢弃,空缺位补0。
>>右移3 >> 1 = 1 --> 3/2=1被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1。
>>>无符号右移3 >>> 1 = 1 --> 3/2=1被移位二进制最高位无论是0或者是1,空缺位都用0补。
&与运算6 & 3 = 2二进制位进行&运算,只有1&1时结果是1,否则是0;
|或运算6 | 3 = 7二进制位进行
^异或运算6 ^ 3 = 5相同二进制位进行 ^ 运算,结果是0; 1^1=0 , 0^0=0;不相同二进制位 ^ 运算结果是1。 1^0=1 , 0^1=1
~取反运算~6 = -7正数取反,各二进制码按补码各位取反;负数取反,各二进制码按补码各位取反
  • 位运算符操作的都是整型的数据;
  • << :在一定范围内,每向左移1位,相当于 * 2;
    >> :在一定范围内,每向右移1位,相当于 / 2;
  • 典型题目:
    • 1.实现最高效的2 * 8。答案:2 << 3 或 8 << 1。
    • 2.交换两个变量的值。
    • 3.实现60的二进制到十六进制的转换。
public class Test {
	public static void main(String[] args) {
		int i = -21;
		System.out.println("i << 2 :" + (i << 2));// -84
		System.out.println("i << 27 :" + (i << 27));// 1476395008

		int m = 12;
		int n = 5;
		System.out.println("m & n :" + (m & n));//4
		System.out.println("m | n :" + (m | n));//13
		System.out.println("m ^ n :" + (m ^ n));//9

		//交换两个变量的值
		int num1 = 10;
		int num2 = 20;
		num1 = num1 ^ num2;
		num2 = num1 ^ num2;
		num1 = num1 ^ num2;

		System.out.println("num1 = " + num1 + ",num2 = " + num2);
	}
}

6、三元运算符

  • 格式:(条件表达式)?表达式1:表达式2;
    • 条件表达式的结果为boolean类型;
    • 如果表达式为true,则执行表达式1。
    • 如果表达式为false,则执行表达式2。
    • 表达式1和表达式2为同种类型;
    • 三元运算符可以嵌套使用;
  • 三元运算符与if-else的联系与区别:
    • 三元运算符可简化if-else语句;
    • 三元运算符要求必须返回一个结果;
    • if后的代码块可有多个语句;
    • 凡是可以使用三元运算符的地方,都可以改写为if-else,反之,不成立;
    • 既可以使用三元运算符又可以使用if-else结构时,优先选择三元运算符。原因:简洁、执行效率高。
public class Test {
	public static void main(String[] args) {
		
		//获取两个整数的较大值
		int m = 12;
		int n = 5;
		int max = (m > n)? m : n;
		System.out.println(max);

		//改写成if-else:
		if(m > n){
			System.out.println(m);
		}else{
			System.out.println(n);
		}
	}
}
  • 运算符的优先级
    • 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下表,上一行运算
      符总优先于下一行。
    • 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
运算顺序运算符
. () {} ; ,
R—>L++ – ~ !(data type)
L—>R* / %
L—>R+ -
L—>R<< >> >>>
L—>R< > <= >= instanceof
L—>R== !=
L—>R&
L—>R^
L—>R|
L—>R&&
L—>R||
R—>L? :
R—>L= *= /= %=
+= -= <<= >>=
>>>= &= ^= |=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值