运算符及使用

1.算术运算符 :

知识点:算数运算符的基本使用
	+-*/%++--
        
  //+、-、*、/       
  int num1 = 10;
     int num2 = 5;
     int result = num1 + num2;
     System.out.println(result);//15
     System.out.println(num1 - num2);//5
     System.out.println(10 * 5);//50
     System.out.println(10 / 5);//2
     System.out.println(10 % 3);//1

 //++a:先自增1,再使用
     int a = 10;
     System.out.println(++a);//11
     System.out.println(a);//11

 //d--:先使用,在自减1
     int d = 10;
     System.out.println(d--);//10
     System.out.println(d);//9
知识点:深入算数运算符
	+-*/%++--
        
	案例一:byte类型做运算,会向上转型成int
		byte b1 = 10;
		byte b2 = 20;
		//10 - byte - 8位:0000,1010
		//10 - int  -32位:0000,0000,0000,0000,0000,0000,0000,1010
		//20 - byte - 8位:0001,0100
		//20 - int  -32位:0000,0000,0000,0000,0000,0000,0001,0100
		//30 - int  -32位:0000,0000,0000,0000,0000,0000,0001,1110
		//30 - byte - 8位:0001,1110
		byte result = (byte)(b1+b2);
		System.out.println(result);
		
	案例二:short类型做运算,会向上转型成int
		short s1 = 10;
		short s2 = 20;
		short result = (short)(s1+s2);
		System.out.println(result);
		
	案例三:描述下列计算结果的类型
		byte b = 10;
		short s = 10;
		int i = 10;
		long l = 10;
		float f = 1.1F;
		double d = 2.2;
		System.out.println(b+s);//int类型
		System.out.println(i+s);//int类型
		System.out.println(l+s);//long类型
		System.out.println(i+l);//long类型
		System.out.println(i+f);//float类型
		System.out.println(i+d);//double类型
		
	案例四:浮点类型不能直接做运算,要做运算会使用BigDecimal(大数值运算类)
		double d1 = 0.5;
		double d2 = 0.4;
		System.out.println(d1-d2);//0.09999999999999998
		
	案例5'a'的ASCII是97
		char c = 'a';
		System.out.println(c+1);//98
	
	经典面试题一:输出结果为?
		int a = 8;
		int b = (a++)+(++a)+(a*10);
		System.out.println(b);//118
		//a = 10
		//b = 8 + 10 + 10
		
	经典面试题二:输出结果为?
		int i =  0;   
		i = ++i; 
		//底层原理:
		//i = (int)(i+1);
		//i = i;
		System.out.println(i);//1
		
		int i = 0;   
		i = i++;  
		//底层原理:
		//int temp = i;--temp用于记录i最初的值
		//i = (int)(i+1);
		//i = temp
		System.out.println(i);//0 
		
	扩展1byte b = 10;
		++b;//底层:b = (byte)(b+1);
		short s = 10;
		++s;//底层:s = (short)(s+1);
		int i = 10;
		++i;//底层:i = (int)(i+1);
		long l = 10;
		l++;//底层:l = (long)(l+1);
		
	扩展2int i = 10;
		i++;	//++i;
		System.out.println(i); //11
		//++i; 和 i++; 没有区别,因为分号是一条执行语句的结束标志,不管先加还是后加都会加1

2. 赋值运算符:

知识点:赋值运算符
	=+=-=*=/=%=
		
    	int i = 10;
	
		i += 10;	//i = (int)(i+10);
		i -= 10;	//i = (int)(i-10);
		i *= 5 ;	//i = (int)(i*5);
		i /= 5 ;	//i = (int)(i/5);
		i %= 3 ;	//i = (int)(i%3);
		System.out.println(i);//1

	经典面试题一:输出结果为?
        //一次性声明多个变量
        int a,b; 
        a = b = 100;//把100赋值给b,b再赋值给a
        System.out.println(a);//100
        System.out.println(b);//100
 	经典面试题二:下面的两种写法结果分别是?
        short s=1; 
        s = s+1;//报错:short类型的变量s与int类型的数字1做运算的结果是int类型 

        short s=1; 
        s += 1;//s = (short)(s+1);
	赋值规则:
			s  + = 1
        	s  = (T)((s) + (1) )
			复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1)op(E2)),
			其中T是E1的类型。

3.关系运算符:

注意:
  1. 关系运算符的结果都是boolean类型,即true或false
  2. 不要将 == 用成 =
知识点:关系运算符
	==!=>>=<=
			
        System.out.println(10 == 10);//true
        System.out.println(10 != 10);//false
        System.out.println(10 > 10);//false
        System.out.println(10 >= 10);//true
        System.out.println(10 < 10);//false
        System.out.println(10 <= 10);//true
			
    总结:
        1.=是赋值号,==是判断两个值是否相等
        2.关系运算符运算的结果都是boolean值
				
    经典面试题一:输出结果为?
        int x = 10;
        int y = 10;
        boolean flag = (x == y);
        System.out.println(flag);//true
        flag = (x = y);//报错:boolean不能与其他类型兼容
        System.out.println(flag);
				
	经典面试题二:输出结果为?
        boolean b1 = true;
        boolean b2 = false;
        boolean b3 = (b1 == b2);
        System.out.println(b3);//false
        boolean b4 = (b1 = b2);
        System.out.println(b4);//false

4.逻辑运算符

知识点:逻辑运算符
	&&&短路与
    |||短路或
    ^异或
    !// &与:运算符两边都是boolean值,同时成立(true),结果才为true
        System.out.println(true & true);//true
        System.out.println(true & false);//false
        System.out.println(false & true);//false
        System.out.println(false & false);//false
			
	// &&短路与:运算符两边都是boolean值,同时成立(true),结果才为true
			
    // & vs && (通过除数为0来判断)
    &:判断前者为false后,会继续判断后者
    &&:判断前者为false后,不会判断后者,所以效率更高
        //ArithmeticException - 算数类异常
        System.out.println(false && 10/0>5);
			
	// |或:运算符两边都是boolean值,有一个成立(true),结果就为true
        System.out.println(true | true);//true
        System.out.println(true | false);//true
        System.out.println(false | true);//true
        System.out.println(false | false);//false
			
	// ||短路或:运算符两边都是boolean值,有一个成立(true),结果就为true

    // | vs ||(通过除数为0来判断)
    |:判断前者为true,还会继续判断后者
    ||:判断前者为true,不会判断后者,所以效率更高
        System.out.println(true || 10/0>5);
			
	// ^异或:运算符两边都是boolean值,相同为false,不同为true
        System.out.println(true ^ true);//false
        System.out.println(true ^ false);//true
			
	// !非 - 置反
        boolean bool = true;
        System.out.println(!bool);//false
知识点:逻辑运算符的案例
//在dos窗口输入一个数字,判断是否在50~100的区间内
//1.输入一个int数字
	Scanner scan = new Scanner(System.in);
	System.out.println("请输入一个int值:");
	int num = scan.nextInt();
	
//2.判断是否在50~100的区间内
	boolean bool = num>50 && num<100;
	
//3.输出结果
	System.out.println("该值是否在50~100的区间内:" + bool);

5.三目运算符/三元运算符

扩展: 知识点:Scanner类的使用
含义:Java给我们提供的一个类,这个类的功能就是在控制台输入数据

	//创建Scanner类的对象
    Scanner scan = new Scanner(System.in);

    //调用方法
    int i1 = scan.nextInt();//在控制台输入一个int数据
    int i2 = scan.nextInt();//在控制台输入一个int数据
    double d = scan.nextDouble();//在控制台输入一个double数据
    String str = scan.next();//在控制台输入一个String数据
知识点:三目运算符/三元运算符
语法:
    数据类型 变量 = (表达式)?1:2;
理解:
    表达式的结果必须是boolean类型
    true - 将值1赋值给变量
    false- 将值2赋值给变量

	例:
        int num = (false)?10:20;
        System.out.println(num);//20

	案例1:在控制台输入两个int类型的数字,输出最大值
        //创建Scanner类的对象scan
        Scanner scan = new Scanner(System.in);

		//输入两个数字
        System.out.println("请输入第一个数字:");
        int a = scan.nextInt();
        System.out.println("请输入第二个数字:");
        int b = scan.nextInt();
		//判断大小
		int max = (a>b)?a:b;//判断a是否大于b,如果大于就返回a,否则返回b
		//输出最大值
		System.out.println("最大值为:" + max);
			
	案例2:在控制台输入三个int类型的数字,输出最大值
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        int a = scan.nextInt();
        System.out.println("请输入第二个数字:");
        int b = scan.nextInt();
        System.out.println("请输入第三个数字:");
        int c = scan.nextInt();
			
        int max = (a>b)?a:b;
        max = (max>c)?max:c;

        System.out.println("最大值为:" + max);
			
	案例4:在控制台输入三个int类型的数字,由小到大输出
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        int a = scan.nextInt();
        System.out.println("请输入第二个数字:");
        int b = scan.nextInt();
        System.out.println("请输入第三个数字:");
        int c = scan.nextInt();
			
        //获取最大值
        int max = (a>b)?a:b;
        max = (max>c)?max:c;
        //获取最小值
        int min = (a<b)?a:b;
        min = (min<c)?min:c;
	//获取中间值
        int mid = a+b+c-max-min;
        System.out.println(min + "<" + mid + "<" + max);


知识点:深入三目运算符
扩展面试题1int a = 5;
    System.out.println((a<5)?10.9:9);//9.0

扩展面试题2char x = 'x';//'x' - ASCII - 120
    byte i = 10;
    System.out.println(false?i:x);//120

扩展面试题3char x = 'x';//'x' - ASCII - 120
    System.out.println(false?100:x);//x
	System.out.println(true?97:x);//a
    System.out.println(false?65536:x);//120

三目运算符返回值规则:
    1.1和值2都是常量 或 都是变量的情况,就会按照运算时数据类型的取值范围大的类型返回数据 
    2.1是常量,值2是变量的情况,值1是否在值2所属类型的取值范围里
    在,就按照值2类型返回数据
    不在,就按照值1类型返回数据

6.字符串拼接符

知识点:字符串拼接符 +		
+两侧都是数值: 此符号为算术运算符
+有一侧或者两侧是字符串: 则此符号为字符串拼接符
    
System.out.println(1+2+"abc" + "def" +1+2);//3abcdeef12

7.位运算符

知识点:位运算符
	&|^异或
    << 左移
    >> 右移
    >>>无符号位右移

    含义:将十进制的数据转换为二进制再进行运算
			
        // &:同位比较,两者为1,结果才为1
        byte b1 = 23;//0001,0111
        byte b2 = 25;//0001,1001
        //23 byte - 0001,0111
        //23 int  - 0000,0000,0000,0000,0000,0000,0001,0111
        //25 byte - 0001,1001
        //25 int  - 0000,0000,0000,0000,0000,0000,0001,1001
        //17 int  - 0000,0000,0000,0000,0000,0000,0001,0001(运算结果)
        //17 byte - 0001,0001
        byte result = (byte)(b1 & b2);
        System.out.println(result);//17 - 0001,0001
			
        // |:同位比较,两者有1,结果就为1
        byte b1 = 23;//0001,0111
        byte b2 = 25;//0001,1001
        System.out.println(b1 | b2);//31 - 0001,1111
			
        // ^:同位比较,两者相同为0,不同为1
        byte b1 = 23;//0001,0111
        byte b2 = 25;//0001,1001
        System.out.println(b1 ^ b2);//14 - 0000,1110
			
    &|^:运算符两边都是数值时,该符号为 位运算符
    &|^:运算符两边都是boolean值,该符号为 逻辑运算符
			
        // <<:整体向左移动n位,就用n个0补位
        byte b1 = 10;//0000,1010
        System.out.println(b1 << 2);
			
        // >>:整体向右移动n位,就用n个最高位补位
        byte b1 = 10;//0000,1010
        //10  int:0000,0000,0000,0000,0000,0000,0000,1010
        //2		 :0000,0000,0000,0000,0000,0000,0000,0010
        System.out.println(b1 >> 2);

        byte b2 = -10;//1111,0110
        //-10  int:1111,1111,1111,1111,1111,1111,1111,0110
        //-3 	  :1111,1111,1111,1111,1111,1111,1111,1101
        System.out.println(b2 >> 2);
			
        //>>>:整体向右移动n位,就用n个0补位
        byte b1 = 10;//0000,1010
        //10 byte:0000,1010
        //10  int:0000,0000,0000,0000,0000,0000,0000,1010
        //2		 :0000,0000,0000,0000,0000,0000,0000,0010
        System.out.println(b1 >>> 2);
			
        byte b2 = -10;//1111,0110
        //-10 byte:1111,0110
        //-10  int:1111,1111,1111,1111,1111,1111,1111,0110
        //1073741821:0011,1111,1111,1111,1111,1111,1111,1101
        System.out.println(b2 >>> 2);
			
	//注意:>> 和 >>> 如果是操作整数,效果是一样的
			
	经典面试题1:使用最有效率的方式计算2*8
        System.out.println(2<<3);
				
	经典面试题2:描述下列代码的输出结果
        //-1 int:1111,1111,1111,1111,1111,1111,1111,1111
        //(byte):1111,1111
        //(char):1111,1111,1111,1111 -- char类型向上转型用0补位
        //(int) :0000,0000,0000,0000,1111,1111,1111,1111
        System.out.println((int)(char)(byte)-1);//65535

8.表达式

知识点:表达式
    5+6:算术表达式
    5>6:关系表达式
    true & false:逻辑表达式

9.运算符的优先级别

经验:不用记,灵活运用小括号

转义字符&常量

知识点:转义字符
含义:具有特殊意义的字符本身

		\n:表示换行
		\":表示一个双引号
		\':表示一个单引号
		\\:表示一个斜杠
		\t:表示水平制表

		System.out.print("用良心做教育\n");
		System.out.print("用良心做教育\n");
		System.out.println("何老师说:\"用良心做教育\"");
		System.out.println("何老师说:\'用良心做教育\'");
		System.out.println("何老师说:\\用良心做教育\\");

		System.out.println("3*3=9\t3*4=12\t3*5=15");
		System.out.println("4*3=12\t4*4=16\t4*5=20");
知识点:常量
含义:在程序执行过程中不可变的量
    分类:
    1.数字字面量(ps:691002002.字面值常量(ps:"abcd",即为字符串
    3.final(最终的)修饰的变量
        final int i = 100;//i为常量,值为100
        
	字面值常量和final(最终的)修饰的变量:存储在常量池中,直到项目结束才会被销毁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值