JAVA之运算符

JAVA小白进阶之路

综述

运算符:
算术运算符: +, -, *, /, %,前 ++,后 ++,前 --,后 –
赋值运算符
比较(关系运算符)
逻辑运算符
位运算符
三元运算符

算术运算符

说明

1. ‘+’:
2. ‘-’:
3. ‘/’:int型的除运算只保留整数部分
4. ‘%’:结果得符号应与被模数的符号相同
5. ‘++’:前++(先自增,后运算)、后++(先运算后自增);若使用时,分开写,结果没影响
6. ‘--’:同上

举例

例1:

class AriTest{
	public static void main(String[] args){
		//除号:/
		int num1 = 12;
		int num2 = 5;
		int result1 = num1 / num2;
		System.out.println(result1);    //2
		
		int result2 = num1 / num2 * num2;
		System.out.println(result2);     //10
		
		double result3 = num1 / num2;
		System.out.println(result3);   //2.0
		
		double result4 = num1 / (num2 + 0.0);
		System.out.println(result4);      //2.4
		double result5 = (double)num1 / num2;
		System.out.println(result5);       //2.4
       	double result6 = (double)(num1 / num2);
		System.out.println(result6);      //2.0

		//取模:%
		//取模的符号与被模数的符号相同
		//开发中,经常使用%判断能否被除尽
		int m1 = 12;
		int n1 = 5;
		System.out.println("m1 % n1 = "+ m1 % n1);  //2
		int m2 = -12;
		int n2 = 5;
		System.out.println("m2 % n2 = "+ m2 % n2);  //-2
		int m3 = 12;
		int n3 = -5;
		System.out.println("m3 % n3 = "+ m3 % n3);  //2
		int m4 = -12;
		int n4 = -5;
		System.out.println("m4 % n4 = "+ m4 % n4);  //-2
           
		//前++(先自增,后运算)、后++(先运算后自增)
		int a1 = 10;
		int b1 = ++a1;  //若分开写,前--、后--是没有区别的
		System.out.println("a1 = " + a1 + ",b1 = " + b1);   // 11,11
		int a2 = 10;
		int b2 = a2++;
		System.out.println("a2 = " + a2 + ",b2 = " + b2);  //11,10
		//注意
		short s1 = 10;
		//s1 = s1 + 1;  编译失败(自动类型提升后,应赋值给int型)
		s1 = (short)(s1 + 1);
		s1++;   //自增1不会改变本身变量的数据类型
		System.out.println("s1 = " + s1);

		//前--(先减,后运算),后--(先运算,后减)

		//练习,得各位数字
		int x = 187;
		System.out.println("数字"+ x + "的情况如下:");
		System.out.println("个位数:" + x % 10);
		System.out.println("十位数:" +  x / 10 % 10);
		System.out.println("百位数:" + x / 100);
	}
}

例2:

class  Test{
	public static void main(String[] args){
		boolean x = true;
		boolean y = false;
		short z = 42;
		//if(y == true)
		 if((z++ == 42) &&(y = true)) z++;
		 if((x = false) || (++z == 45)) z++;

		System.out.println("z=" + z);  //46

	}
}
	

逻辑运算符

说明

&:逻辑与
&&:短路与
相同点:&与&&运算结果相同;当左边为true时,都执行;
不同点:当左边为false,短路不执行右边的
开发中推荐使用短路
|:逻辑或
||:短路或
相同点:运算结果相同;当符号左边是false时都执行
不同点:当符号左边是true时,短路不执行符号右边。
开发中推荐使用短路
!:逻辑非
^:逻辑异或

举例

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);  //11
	
		boolean b2 = true;
		//b2 = false;
		int num2 = 10;
		if(b2 || (num2++ > 0)){
			System.out.println("我现在在北京");
		}else{
			System.out.println("我现在在南京");
		}
		System.out.println("num2 = " + num2);  //10

		//区分 |与||
		//相同点:运算结果相同;当符号左边是false时都执行
		//不同点:当符号左边是true时,短路不执行符号右边。
		//开发中推荐使用短路
	}
}

位运算符

说明

结果:结果为整型
1.<< , >>
操作的都是整型的变量,每向左移一位,乘以2,向右移除以2(负数高位补1)
面试题:最高效的 2*8 最高效的:移位
2.>>>:无符号移
3.&:
4.|:
5.^ :
6.~:按补码取反

举例

class BitTest{
	public static void main(String[] args){
		int i = -21;
		System.out.println("i << 2 :" + (i << 2));
		System.out.println("i << 3 :" + (i << 3));
		
		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;
		
		int num3 = 10;
		int num4 = 20;
		//方式1:推荐
		int temp;
		temp = num1;
		num1 = num2;
		num2 = temp;
		System.out.println("num1 = "+ num1 +" num2 = "+num2);
		
		//方式2:
		//弊端:相加操作可能超出存储范围,有局限性
		num3 = num3 + num4; 
		num4 = num3 - num4;
		num3 = num3 - num4;
		System.out.println("num3 = "+ num3 +" num4 = "+num4);
		
		//方式3:
		int num5 = 10;
		int num6 = 20;
		num5 = (num5 ^ num6);
		num6 = num5 ^num6;
		num5 = num5^num6;
		System.out.println("num5 = "+ num5 +" num6 = "+num6);
	}
}

赋值运算符

说明

= ,支持连续赋值
+=、-=、/=、*=,不会改变数据类型

举例

例1:

	short s1 = 10;
	//s1 = s1 + 2;   编译不通过
	s1 += 2;    //不会改变数据类型
	System.out.println(s1);
	
	int num= 10//加2操作推荐
	num += 2;
	//+1操作推荐
	num++;
	
	//
	int i = 1;
	i *= 0.1;
	System.out.println(i);    //0
	i++;
	System.out.println(i);   //1

例2:

	//练习2
	int m = 2;
	int n = 3;
	n *= m++;
	System.out.println("m=" + m);  //3
	System.out.println("n=" + n);  //6

	//练习3
	int x = 10;
	x += (x++) + (++x);  //x = x + (x++) + (++x);   32
	System.out.println(x);

比较运算符

说明

比较运算符: 结果为boolean
== ,!= :不仅可以使用在数值类型的数据之间,还可以使用在其他引用类型的变量间

Account acct1 = new Account(100);
Account acct2 = new Account(100);
boolean b1 = (acct1 == acct2);
//比较结果为两个Account是否为同一个账户:false

, < ,>=, <= :只能使用在数值类型的数据之间
instanceof
比较运算符的结果是Boolean类型
注意:区分==和=

举例

int k1 = 10;
	int k2 = 20;
	System.out.println(k1 == k2);  //false
	System.out.println(k1 = k2);   //20
	
	boolean b1 = true;
	boolean b2 = false;
	System.out.println(b1 == b2);  //false
	System.out.println(b2 = b1);   //ture

三元运算符

说明

1.格式:(条件表达式)?表达式1:表达式2;
2. 注意:
1)条件表达式的结果为Boolean,为true执行1,为false执行2
2)表达式1和表达式2要求是一致的,能统一类型
3)三元运算符可以嵌套
4)凡事可以三元运算符的都可以使用if else,反之不行哦~
5)如果程序既可以使用三元运算符,又可以使用if else,那么优优先选择三元运算符,原因:简洁、效率高

举例

class SanYuan{
	public static void main(String[] args){
		
		//获取两个整数中的较大值
		int m = 12;
		int n = 5;
		int max = (m > n)? m : n;
		System.out.println(max);
		//(m > n)? 2 : "n大";   编译错误   条件2)
		
		String maxStr = (m > n)? "m大" : ((m == n) ? "m和n相等" : "n大");
		System.out.println(maxStr);
		

		//获取三个数的最大值
		int n1 = 12;
		int n2 = 10;
		int n3 = -43;
		//方法1:推荐
		int temp = (n1 > n2)? n1 : n2;
		temp = (temp > n3) ? temp : n3;
		//方法2:合并
		int temp2 = (((n1 > n2)? n1 : n2) > n3) ? ((n1 > n2)? n1 : n2) : n3;
		System.out.println("max1 = "+temp);
		System.out.println("max2 = "+temp2);

	}
}

你可能感兴趣的:(Java)