java基礎03

运算符

概要:针对常量和变量之间进行运算的符号。

eg: a + 1  a + b a / b a > b
运算符的分类:

​ 算术运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 三目运算符。

算术运算符:

+ , - ,  * , / ,  % ,  ++ ,  --
例:    
		System.out.println(2-5); // -3
		System.out.println(2*5); // 10
		System.out.println(2/5); // 0
		System.out.println(2%5); // 2

" + "+在Java当中含义很多:

  1. 作为正数 单目运算符 双目运算符 三目运算符 +5 a + b a ? b : c

    		System.out.println(+5);
    		System.out.println(-5);
    		
    
  2. 加法运算符

    	System.out.println(2+5);
    
  3. 字符串连接符

    注意:
    + 号拼接任意类型的数据结果都是字符串类型

   System.out.println("555"+5);

技巧:

  1. ​ 如何计算中防止精度丢失

    System.out.println((double)2/4); -->添加强制转换成相对应的数据类型
    
  2. ​ 如何分离数中的每一个数

例:

分离1234:
			分离个位: 1234 / 1 % 10
			分离十位: 1234 / 10 % 10
			分离百位: 1234 / 100 % 10
			分离千位: 1234 / 1000 % 10
自增自减运算符

​ 概念:++ – 属于单目运算符

含义:
	++ 表示自增1
	-- 表示自减1

分为
单独使用

​ 表示自增或者自减,没有任何区别

​ 参与运算
如果++放在操作数的左边,就表示先自增再参与运算
如果++放在操作数的右边,就表示先参与运算,再自增或者自减1

例:

public class OperatorDemo02 {
	public static void main(String[] args){
		
		int a = 10;
		int b = 20;
		System.out.println("a=" + a + ",b=" + b);
		
		// a++;  先运算再进行自加1
		// b--;  先运算再进行自减1
		
		//++a;   先进行自加1再进行运算 
		//--b;	 先进行自减1再进行运算 
		//System.out.println("a=" + a + ",b=" + b);
		
		// int c = ++a;
		// int d = --b;
		// System.out.println("a=" + a + ",b=" + b + ",c=" + c + ",d=" + d); // a=11,b=19,c=11,d=19
		
		int c = a++; //c=10
		int d = b--; //d=20
		System.out.println("a=" + a + ",b=" + b + ",c=" + c + ",d=" + d); // a=11,b=19,c=10,d=20
	}
}
赋值运算符

" = ": 这个等于号在Java中表示赋值的意思,真正数学意义上的相等是 ,在JavaScript中还有=

		// 将数据10赋值给变量x
		int x = 10;

扩展赋值运算符:

	+= , -= , *= ,  /= ,  %= 
   	+=  等于 a= a + b 
	-=  等于 a= a - b 
	*=  等于 a= a * b 
	/=  等于 a= a / b 
	%=  等于 a= a % b 
例:
		x += 5; // x = x + 5;
		x *= 5; // x = x * 5;
		System.out.println(x);

经典面试题:

	面试题:
	short s1 = 1;?s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错??
	前者编译失败,shortint类型计算结果是int类型,int类型赋值给short类型,需要强制类型转换
	后者编译通过,因为使用扩展赋值运算符系统会自动帮我们强制类型转换
	
		/*short s1 = 1;
		s1 = (short)(s1 + 1);
		System.out.println(s1);*/
		
		short s1 = 1;
		s1 += 1; // s1 = (short)(s1 + 1);
		System.out.println(s1);
技巧: 如何交换两个数?

​ int x = 10;
​ int y = 20;
​ 1.定义中间变量temp
​ 2.使用异或来进行交换两个数的位置 (位运算符学习)

例:

		int a = 10;
		int b = 20;
		System.out.println("a=" + a + ",b=" + b);
		int temp = 0;
		temp = a; 
		a = b;
		b = temp;
		System.out.println("a=" + a + ",b=" + b);

关系运算符

>  : 小于
<  : 大于
>= : 大于等于
<= : 小于等于
!= : 不等于
== : 等于

关系运算符的结果是boolean类型

例:

public class OperatorDemo05 {
	public static void main(String[] args){
		
		int a = 10;
		int b = 20;
		System.out.println(a > b); // false
		System.out.println(a < b); // true
		System.out.println(a >= b); // false 大于或者等于
		System.out.println(a <= b); // true
		System.out.println(a == b); // false
		System.out.println(a != b); // true
	}
}

逻辑运算符

作用:

​ 连接多个boolean类型的表达式 。
​ boolean类型的表达式1 逻辑运算符 boolean类型的表达式2 逻辑运算符 boolean类型的表达式3。

分类:

& 按位与

		System.out.println(a > b & a < b); // false & true = false
		System.out.println(a > b & a > b); // false & false = false
		System.out.println(a < b & a < b); // true & true = true
		System.out.println(a < b & a > b); // true & false = false

​ | 按位或

		System.out.println(a > b | a < b); // false & true = true
		System.out.println(a > b | a > b); // false & false = false
		System.out.println(a < b | a < b); // true & true = true
		System.out.println(a < b | a > b); // true & false = true

​ ^ 异或

		System.out.println(a > b ^ a < b); // false & true = true 
		System.out.println(a > b ^ a > b); // false & false = false
		System.out.println(a < b ^ a < b); // true & true = false
		System.out.println(a < b ^ a > b); // true & false = true

&& 短路与

		System.out.println(a > b && a < b); // false & true = false
		System.out.println(a > b && a > b); // false & false = false
		System.out.println(a < b && a < b); // true & true = true
		System.out.println(a < b && a > b); // true & false = false

|| 短路或

		System.out.println(a > b ||a < b); // false & true = true
		System.out.println(a > b || a > b); // false & false = false
		System.out.println(a < b || a < b); // true & true = true
		System.out.println(a < b || a > b); // true & false = true

**非:**如果位为0,结果是1,如果位为1,结果是0,

与: 有一个为false结果为false
如果都为true结果才为true。

或: 有一个为true结果为true
如果两个都为false结果才为false。

经典面试题: & 和 && 的区别

	& 	表示按位与,无论什么情况都会同时计算运算符两边的表达式
	&& 	表示短路与, 如果前面的表达式为false,那么无论后面结果如何,都不会去计算后面表达式的值
	&&	开发中使用,&基本不用
	&	常用于位运算,位运算的效率比普通运算要高很多 

位运算符:

		System.out.println(9 & 6); // 0
		System.out.println(9 | 6); // 15
		System.out.println(9 ^ 6); // 15
		System.out.println(!!!!!!!!!!!!!!(a > b)); // false

&:两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段

public class data13
{
public static void main(String[] args)
{
int a=129;
int b=128;
System.out.println("a 和b 与的结果是:"+(a&b));
}
}

^ : 相同为false,不同为true

		1001 ^ 0110 =1 0 0 1
		^	0 1 1 0
		-----------
			1 1 1 1

! : 取反
当!的个数是奇数个的时候,结果相反
当!的个数是偶数个的时候,结果不变

条件运算符(三目运算符)

格式: X ? Y : Z
X表达式必须是boolean类型的表达式
执行流程:
首先计算X表达式的结果, 如果X的结果为true, 那么整个表达式的结果就是Y的值
如果X的结果为false,那么整个表达式的结果就是Z的值

例:

public class OperatorDemo07 {
	public static void main(String[] args){
		// 求两个数的最大值
		int x = 200;
		int y = 100;
		int max = x > y ? x: y;
		System.out.println(max);
		
		// 求三个数的最大值?
		int a = 100;
		int b = 200;
		int c = 300;
		// 如果存在三目运算符嵌套的问题,必须使用 () 去改变运算符的优先级,提高程序的可读性
		max = (a > b) ? (a > c? a : c) : (b > c ? b : c);
		System.out.println(max);
				
		// 需求: 小明考试成绩高于99分,老师奖励他一个苹果,否则奖励他一个苹果电脑
		double score = 60;
		String prize = (score > 99) ? "苹果": "苹果电脑";
		System.out.println(prize);
		
	}
}

表达式: 符合一定语法规则的运算符和操作数的式子

运算符: 算数运算符,赋值运算符,关系运算符,逻辑运算符,位运算符(了解), 三目运算符
操作数: 变量或者常量
a + b  a * 6 4 - 3 int a = 10; 

表达式的分类:
1.按照复杂程度来分:
2.简单表达式: 只有一个运算符的表达式 a + b a * 6 4 - 3
3.复杂表达式: 两个或者两个以上的运算符组成的表达式 a > b && a < b
4.如果复杂表达式就必须要知道运算符的优先级
按照运算符两边的操作数来分
单目 双目 三目

	+5 3+a x?y:z

按照名称来分:
		a + b 算数表达式
		
表达式的值: 整个表达式的结果
			int a = 30; int b = 40; a * b
表达式的值的类型: 
			int a = 30; int b = 40; a * b
		
学习复杂表达式:
	(a - b) * c - 4     
	i < 30 && i % 10 != 0 

运算符的优先级
1.有括号先计算括号里面的
2.单目运算符 > 双目运算符 > 三目运算符
3.算数运算符(* / % > + -) > 关系运算符(> <… > == !=) > 逻辑运算符(&& > ||) > 条件运算符 > 赋值运算符
4.如果运算符的优先级相同,从左至右即可
5.+ - > ++ – !

技巧:

​ 如果针对特别复杂的表达式,可以根据运算符的优先级规律,然后使用()改变优先级,提高程序的可读性。

例:

public class OperatorDemo08 {
	public static void main(String[] args){
		int i = 10;
		boolean bool = i < 30 && i % 10 != 0; 
		
		// boolean bool = ((i < 30) && ((i % 10) != 0)); true && false = false
		System.out.println(bool);
		
		int m = 3;
		int n = 4;
		boolean b = (++m == 3) && (n++ == 4); 
		// System.out.println(b);
		System.out.println("m="+m+",n=" +n + ",b=" + b); // m=4,n=4,b=false
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值