JavaSE(5)——运算符

运算符


1. 算数运算符:
JavaSE(5)——运算符

代码示例:

package exercise.aritest;

public class AriTest {
	public static void main(String[] args) {
		//除号
		int num1 = 12;
		int num2 = 5;
		int result1 = num1 / num2;
		System.out.println(result1);
		
		int result2 = num1 / num2 * num2;
		System.out.println(result2);
		
		double result3 = num1 / num2;	//此结果是讲整型运算结果赋值给double型变量
		System.out.println(result3);
		
		double result4 = num1 / num2 + 0.0;
		double result5 = num1 / (num2 + 0.0);//除数已经是浮点型
		double result6 = (double)num1 / num2;
		double result7 = (double)(num1 / num2);
		System.out.println(result4);
		System.out.println(result5);
		System.out.println(result6);
		System.out.println(result7);
		
		
		//取余运算
		//结果的符号与被模数的符号相同
		//开发中,经常使用%来判断能否被除尽的情况
		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);
		
		//(前)++:先自增一,然后再运算。
		//(后)++:先运算,然后再自增一。
		int a1 = 10;
		int b1 = ++a1;
		System.out.println("a1 = " + a1 + ",b1 = " + b1);
		
		int a2 = 10;
		int b2 = a2++;
		System.out.println("a2 = " + a2 + ",b2 = " + b2);
		
		int a3 = 10;
		++a3;	//a3++
		int b3 = a3;
		
		//注意点:
		short s1 = 10;
		//s1 = s1 + 1;	//编译失败,这里不满足变量提升规则
		s1 = (short)(s1 + 1);//正确的
		System.out.println(s1);
		s1++;	//自增一不会改变本身变量的数据类型,效率更高
		System.out.println(s1);
		
		//如果是byte
		byte bb1 = 127;
		bb1++;
		System.out.println("bb1 = " + bb1);
		
		//(前)--:先自减一,后运算。
		//(后)--:先运算,后自减一。
		int a4 = 10;
		int b4 = --a4;
		System.out.println("a4 = " + a4 + ",b4 = " + b4);
		
		
	}
}

2. 赋值运算符:

  • 符号: =+=-=*=/=%= (两侧数据类型不一致的时候,可以使用自动类型转换或使用强制类型转换原则进行处理)
  • 支持连续赋值

如果开发中,希望变量实现+2操作,有几种方法?

方式一、num = num + 2;

方式二、num += 2;(推荐)

(同样如果实现+1(-1)操作可以使用自增(自减)运算符,这种方式更为推荐,但是不能使用连续自增(自减)运算去实现+2(-2)操作。)eg:num++++这种就是编译不通过的情况

编程实例:

package exercise.aritest;

public class SetValueTest {
	public static void main(String[] args) {
		//赋值符号:=
		int i1 = 10;
		int j1 = 10;
		
		int i2,j2;
		//连续赋值
		i2 = j2 = 10;
		
		int i3 = 10,j3 = 20;	//中间的逗号表示两个变量都是int类型
		
		//***********************
		int num1 = 10;
		num1 += 2;		//num1 = num1 + 2;
		System.out.println(num1);
		
		int num2 = 12;
		num2 %= 5;	//num2 = num2 % 5;
		System.out.println(num2);
		
		short s1= 10;
		//s1 = s1 + 2;//编译不通过
		s1 += 2;		//这种写法不会改变变量本身的数据类型
		System.out.println(s1);
		
	}
}

3. 比较运算符(关系运算符):
JavaSE(5)——运算符

  • 比较运算符的结果都是布尔型,要么是true,要没事false
  • 注意比较运算符当中的==和赋值运算符中的=之间的区别。
  • 经常用于条件判断当中。

代码实例:

package exercise.aritest;

public class CompareTest {
	public static void main(String[] args) {
		int i = 10;
		int j = 20;
		System.out.println(i == j);	//false
		System.out.println(i = j);	//20//先将j赋值给i,然后再输出i
		
		boolean b1 = true;
		boolean b2 = false;
		System.out.println(b2 == b1);//false
		System.out.println(b2 = b1);//true
		
	}
}

4. 逻辑运算符:

  • 逻辑运算符: &(逻辑与)、|(逻辑或)、!(逻辑非)、&&(短路与)、||(短路或)、^(逻辑异或)
  • 操作的都是boolean类型的变量。
    JavaSE(5)——运算符

代码示例:

package exercise.aritest;

public class LogicTest {
	public static void main(String[] args) {
		//区分 & 和 &&
		//相同点:& 和 && 的运算结果相同;当符号左边是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(b2 && (num2++ > 0)) {//短路与和逻辑与之间的区别就在于如果第一个判断为false,后面就不在判断,因为只有前后两个命题都为true的时候才会判断为true。
			System.out.println("我现在在北京");
		}else {
			System.out.println("我现在在南京");
		}
		System.out.println("num2 = " + num2);
		
		//区分:| 和 ||
		//相同点:| 和 || 的运算结果相同;当符号左边是false时,二者都会执行符号右边的运算
		//不同点:当符号左边时true时,| 继续执行符号右边的运算,|| 不再执行符号右边的运算
		boolean b3 = false;
		int num3 = 10;
		if(b3 | (num3++ > 0)) {
			System.out.println("我现在在北京");
		}else {
			System.out.println("我现在在南京");
		}
		System.out.println("num3 = " + num3);
		
		boolean b4 = false;
		int num4 = 10;
		if(b4 || (num4++ > 0)) {
			System.out.println("我现在在北京");
		}else {
			System.out.println("我现在在南京");
		}
		System.out.println("num4 = " + num4);
	}
}

5. 位运算符: 位运算是直接对整数的二进制进行的运算。(这里的移位运算请见计算机组成原理)
JavaSE(5)——运算符
JavaSE(5)——运算符

注意:只有>>>,没有<<<

  • 移位运算符,可以让底数(2)倍乘法更为简单,效率更高
  • 使用移位运算符还可以进行变量值的交换:
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;

6. 三元运算符:

  • 格式: (条件表达式)?表达式1:表达式2;如果条件表达式的值(结果为boolean型变量)为true,运算后的结果是表达式1;反之为表达式2。
  • 表达式1和表达式2为同种类型。

代码示例:

package exercise.aritest;

public class SanYuanTest {
	public static void main(String[] args) {
		//获取两个整数的较大值。
		int m = 12;
		int n =5;
		
		int max = (m > n) ? m : n;
		System.out.println(max);
		
		double num = (m > n) ? 2 : 1.0;
		//(m > n) ? 2 : "n大";//编译不通过
		System.out.println(num);
		
		// *********************************
		String maxStr = (m > n) ? "m大" : "n大";
		String maxStr1 = (m > n) ? "m大" : ((m == n) ? "m和n相等" : "n大");
		System.out.println(maxStr);
		System.out.println(maxStr1);
		
		//*************************************
		//获取三个数的最大值
		int n1 = 12;
		int n2 = 30;
		int n3 = -43;
		
		int max1 = (n1 > n2) ? n1 : n2;
		int max2 = (max1 > n3) ? max1 : n3;
		System.out.println("三个数中的最大值为:" + max2);
		
		int max3 = (((n1 > n2) ? n1 : n2) > n3) ? ((n1 > n2) ? n1 : n2) : n3;
		System.out.println("三个数中的最大值为:" + max3);
		
	}
}

凡是可以使用三元运算符的地方都可以改写为if-else;反过来不一定可行
如果既可以使用三元运算符,又可以使用if-else,优先使用if-else

7. 运算符的优先级:(自上而下,由高变低)

JavaSE(5)——运算符

上一篇:2、while循环中的else


下一篇:输出数组元素 (发布时格式不对,欢迎斧正)