Java运算符

一、算数运算符

在这里插入图片描述

除(/)

对于除号“ / ”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。

public class comment00{
	public static void main(String[] args){
	System.out.println(10/4); 
	//从数学上看是2.5,但java中是 2
	//(10和4都是int型,结果也只能是int型)
	System.out.println(10.0/4);
	//由于自动类型转换(有多种类型的数据混合时
	//系统首先将所有数据转换成精度最大的那种数据再进行运算),结果为2.5
	double d = 10 /4;  //结果是 2.0
	}	
}

取余,取模(%)

在 % 的本质是一个公式:
a % b = a - a / b * b

public class comment01{
	public static void main(String[] args){
	System.out.println(10 % 3); //1
	System.out.println(-10 % 3); //-1
	System.out.println(10 % -3); //1
	System.out.println(-10 % -3); //-1
	}
}

自增自减(++,- -)

1.作为独立的语句使用:前++(++i)和后++(i++)都完全等价于 i = i + 1;

public class comment01{
	public static void main(String[] args){
	int i = 10;
	int j = 20;
	i++; //自增 等价于 i = i + 1;=> i = 11
	++j; //自增 等价于 j = j + 1;=> j = 21
	}
}

2.作为表达式使用:
1)前++ : ++i 先自增后赋值
2)后++ : i++ 先赋值后自增

public class comment01{
	public static void main(String[] args){
	int m = 11;
	int a = 11;
	int n = m++; //等价 n = m; m = m + 1
	//n =11; m = 12 
	int s = ++a; //等价 a = a + 1; s = a
	// a =  12; s = 12
	}
}

3.面试题
1)面试题1

int i = 1;
i = i++;
System.out.println(i);
//结果是多少?为什么?

int i = 1; => i=1
i = i++; => 用一个临时变量temp接收左侧的i
(1)temp = i; //temp = 1
(2) i = i + 1; // i = 2
(3) i = temp; // i=1

2)面试题2

int i = 1;
i = ++i;
System.out.println(i);

int i = 1; => i=1
i = ++i; => 用一个临时变量temp接收左侧的i
(1) i = i + 1; // i = 2
(2) temp = i; // temp = 2
(3) i = temp; // i=2

二、关系运算符(比较运算符)

1.关系运算符的结果都是boolean型,也就是要么是true,要么是false。
2.关系表达式经常用在 if结构的条件中或循环结构的条件中。
3.关系运算符组成的表达式,我们称为关系表达式。 a > b
4.比较运算符“ == ” 不能误写成“ = ”
在这里插入图片描述

public class comment01{
	public static void main(String[] args){
	int a = 9;
	int b = 8;
	System.out.println(a > b); //true
	System.out.println(a < b); //false
	System.out.println(a == b); //false
	System.out.println(a >= b); //true
	}
}

三、逻辑运算符

1.用于连接多个条件(多个关系表达式),最终的结果也是一个boolean值。
2. 与 &,短路与 &&(一假必假)
3. 或 | , 短路或 | (一真必真)
4. 取反 !
5. 逻辑异或 在这里插入图片描述(a,b相同为假,不同为真)在这里插入图片描述

&& 和 & 基本规则

1.相同:两个条件都为true,结果为true
2.不同:短路与&&:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高;逻辑与& :不管第一个条件是否为false,第二个条件都要判断,效率低。
3.开发中,我们基本是短路与&&,效率高

|| 和 | 基本规则

1.短路或|| :两个条件只要有一个成立,结果为true;逻辑或|| :只要有一个条件成立,结果为true。
2.不同:短路或||:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高;逻辑或|| :不管第一个条件是否为true,第二个条件都要判断,效率低。
3.开发中,我们基本是短路或||,效率高

取反!

如果条件本身成立,结果为false,否则为true。

逻辑异或

public class comment00{
	
	public static void main(String[] args){
	
	// !操作是取反 T->F,F->T
	System.out.println(60 > 20); //true
	System.out.println(!(61 > 20)); //false
	
	// a^b:叫逻辑异或,当a和b不同时,结果为true,否则为false
	boolean b = (10 > 1) ^ (3 > 5);
	System.out.println("b = " + b); //b =true
	}

}

四、赋值运算符

1.赋值运算符就是将某个运算后的值,赋给指定的变量。分为基本运算符和复合赋值运算符
·基本运算符 = :int a = 10;
·复合运算符 += , -= , /= , %= 等。
如:

a += b;[等价于a = a + b]
a -= b;[等价于a = a - b]
a /= b; [等价于a = a / b]

2.赋值运算符特点:
1)运算顺序从右往左 int num = a + b + c;(先算a+b+c,再把(a+b+c)的值赋给num)
2)赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
3)复合赋值运算符会进行类型转换

byte b = 3;
b += 2; //等价 b = (byte)(b + 2);
b++; //等价 b = (byte)(b + 1);

五、三元运算符

1.基本语法:

条件表达式 ? 表达式1:表达式2;

2.运算规则:
1)如果条件表达式为true,运算后的结果是表达式1;
2)如果条件表达式为false,运算后的结果是表达式2;

public class comment00{
	
	public static void main(String[] args){
	
	int a = 10;
	int b = 99;
	int result = a < b ? a++ : b--;
	System.out.println("result = " + result);  //10
	System.out.println("a = " + a); //11
	System.out.println("b = " + b); //99
	}
}

3.使用细节
1)表达式1和表达式2要为可以赋给接受变量的类型(或可以自动转换)

public class comment00{
	
	public static void main(String[] args){
	
	int a = 10;
	int b = 99;
	//强制类型转换
	int result = a > b ? (int)1.1 : (int)3.4;
	//自动类型转换
	double d = a > b ? a : b + 3; 
	}
}

2)三元运算符可以转成if–else语句
int res = a > b ? a++ :–b;

if(a > b)
	res = a++;
else
	res = --b;

六、运算符优先级

1.运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序,如下表,上一行运算符总优先于下一行。
2.只有单目运算符(针对一个数进行计算,如a++)、赋值运算符是从右向左运算的。
在这里插入图片描述
优先级顺序:
1)(),{} 等
2)单目运算符 ++,–
3)算术运算符
4)位移运算符
5)比较运算符
6)逻辑运算符
7)三元运算符
8)赋值运算符

七、练习

实现三个数最大值
n1 = 553; n2 = 33; n3 = 123;

public class comment00{
	
	public static void main(String[] args){
	
	int n1 = 553;
	int n2 = 33;
	int n3 = 123;
	//思路:
	//1.先得到 n1 和 n2 中最大数,保存到 max1
	//2.然后再求出 max1 和 n3 中的最大数,保存到 max2

	int max1 = n1 > n2 ? n1 : n2;
	int max2 = max1 > n3 ? max1 : n3;
	System.out.println("最大数 = " + max2);

	//使用一条语句实现
	int max = (n1 > n2 ? n1 : n2) > n3 ?
				(n1 > n2 ? n1 : n2) : n3;
	System.out.println("最大数 = " + max);
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值