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);
}
}