java2-运算符

1,运算符分类:

  • 算数运算符

    +	-	*	/	%	++	--
    
  • 赋值运算符

    =
    //扩展
    +=	-= *= /=
    
  • 关系/比较运算符

    >	<	>=	<=	==	!=
    
  • 逻辑/布尔运算符

    &&	||	!	&	|
    
  • 位运算符

    &	|	^	~	>>	<<	>>>
    
  • 条件运算符

    ?:
    

2,运算符的优先级

  • 计算>比较>逻辑>位
  • 赋值<三目<逻辑<关系<算数<单目

3,算数运算符

  • +的作用:

    • 表示正数

    • 表示两数相加

    • 字符串的拼接

      public class TestOpt03{
      	public static void main(String[] args){
      		System.out.println(+5);				//表示正数:5
      		System.out.println(5+6);			//相加:11
      		System.out.println(5+'6');			//'6'的ascii码为54:59
      		
      		//加号左右两侧的任意侧有字符串,+起的就是字符串拼接的作用,结果一定是字符串
      		int num = 56;
      		System.out.println("num="+num);		//num=56	
      		System.out.println(5+6+"7");		//11+"7"-->117
      		System.out.println(5+'6'+"7");		//59+"7"-->597
      		System.out.println("5"+6+"7");		//567(char在字符串拼接时用字面值)
      		System.out.println("5"+'6'+"7");	//567
      		System.out.println("5"+'6'+'7');	//567
      	}
      }
      
  • ++:自增

    • ++单独使用时,无论放在变量的前还是后,都是起到+1的作用

    • 但如果++参与到运算中,++在前先自+1再运算,++在后先运算再自+1(无论++的位置,变量总会自+1,只是会对运算的结果产生影响)

      public class TestOpt04{
      	public static void main(String[] args){
      		//++单独使用
      		int a = 5;
      		a++;
      		System.out.println(a);
      		
      		a = 5;
      		++a;
      		System.out.println(a);
      		
      		//++参与运算
      		a = 5;
      		int m = a++ + 7;
      		System.out.println(m);	//12
      		System.out.println(a);
      		
      		a = 5;
      		m = ++a + 7;
      		System.out.println(m);	//13
      		System.out.println(a);
      	}
      }
      
      public class TestOpt05{
      	public static void main(String[] args){
      		int a = 5;
      		System.out.println(a++ + a++);	//11
      		System.out.println(a++ + ++a);	//16
      		System.out.println(++a + a++);	//20
      		System.out.println(++a + ++a);	//25
      	}
      }
      

  • %所得结果:
    所得结果的符号由被取模数确定,绝对值与被取模数和取模数取绝对值所得到的结果相同。

  • /所得结果:
    两数同符号所得结果为正数,两数异符号所得结果为负数,绝对值与两数取绝对值所得到的结果相同。

4,赋值运算符

  • =的作用:将等号右侧的值赋给等号左侧

    //交换两个数
    public class TestOpt06{
    	public static void main(String[] args){
    		//任意给出两个数,交换两个数,再输出
    		int a = 5;
    		int b = 6;
    		
    		System.out.println("交换前:"+a+'\t'+b);
    		
    		//middle a a b b middle 一个圈
    		int middle = a;
    		a = b;
    		b = middle;
    		
    		System.out.println("交换后:"+a+'\t'+b);
    	}
    }
    
  • 扩展赋值运算符

    • a+=b 和 a=a+b的区别
      • a+=b可读性稍差 编译效率高
      • a=a+b可读性好 编译效率低
      • a+=b可以强制类型转换,a=a+b不行
    public class TestOpt07{
    	public static void main(String[] args){
    		int num1 = 10;
    		int num2 = 20;
    		int num3 = 30;
    		int sum = 0;
    		
    		sum += num1;
    		sum += num2;
    		sum += num3;
    		
    		System.out.println("和为:"+sum);
    	}
    }
    
    public class TestOpt08{
    	public static void main(String[] args){
    		byte a = 10;
    		int b = 20;
    		a += b;	//底层自动强制类型转换
    		a = a + b;	//报错
    		//a = (byte)(a + b);
    	}
    }
    

5,逻辑运算符

  • &&和&的区别:

    • &&(短路与)效率更高,只要左侧表达式为false,右侧表达式不计算,直接返回结果false。
    • &(逻辑与)效率相对较低,无论左侧表达式的值,右侧表达式都会计算。
    • ||(短路或),|(逻辑或)的区别类似。
  • !(逻辑非),^(逻辑异或)

    public class TestOpt10{
    	public static void main(String[] args){
    		int i = 2;
    		System.out.println((5==9)&&(i++==2));	//短路与,右侧表达式不计算
    		System.out.println(i);	//2
    		System.out.println((5==9)&(i++==2));	//逻辑与,右侧表达式计算
    		System.out.println(i);	//3
    		
    		i = 2;
    		System.out.println((5==5)&&(i++==2));
    		System.out.println(i);	//2
    	}
    }
    

6,位运算符

  • 如何区分位运算符与逻辑运算符

    • 逻辑运算符:左右两侧连接布尔类型的操作数
    • 位运算符:左右连接的是具体的数值
  • >>为有符号右移 >>>为无符号右移

public class TestOpt12{
	public static void main(String[] args){
		System.out.println(3<<2);	//12
		System.out.println(-3<<2);	//-12
		
		System.out.println(6>>2);	//1
		System.out.println(-6>>2);	//-2
		
		System.out.println(6>>>2);	//1
		System.out.println(-6>>>2);	//1073741822
        
        System.out.println(~(-6));	//5
	}
}

7,条件运算符(三元运算符/三目运算符)

  • 格式:a?b:c 其中a是一个布尔类型的表达式,a为true返回b,a为false返回c

    public class TestOpt11{
    	public static void main(String[] args){
    		String str = (5<7)?"你好":"你不好";
    		System.out.println(str);
    		//System.out.println((5<7)?"你好":"你不好");
    	}
    }
    

例题:

//例题1:取一个四位数的各个数位上的数字
import java.util.Scanner;

public class TestOpt02{
	public static void main(String[] args){
		//键盘录入四位数
		System.out.print("请输入一个四位整数:");
		Scanner sc = new Scanner(System.in);
		//分别求四位上的数字
		int data = sc.nextInt();
		int a,b,c,d,dataRemain;
		a = data / 1000;
		b = data / 100 % 10;
		c = data / 10 % 10;
		d = data % 10;
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
		System.out.println(d);
	}
}
posted @ 2021-08-18 15:36  tensor_zhang  阅读(48)  评论(0编辑  收藏  举报