运算符
概要:针对常量和变量之间进行运算的符号。
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当中含义很多:
-
作为正数 单目运算符 双目运算符 三目运算符 +5 a + b a ? b : c
System.out.println(+5); System.out.println(-5); -
加法运算符
System.out.println(2+5); -
字符串连接符
注意:
+ 号拼接任意类型的数据结果都是字符串类型
System.out.println("555"+5);
技巧:
-
如何计算中防止精度丢失
System.out.println((double)2/4); -->添加强制转换成相对应的数据类型 -
如何分离数中的每一个数
例:
分离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;有什么错??
前者编译失败,short和int类型计算结果是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
}
}
2529

被折叠的 条评论
为什么被折叠?



