Java 的运算符
1.算数运算符:与数学运算符的优先级一样
+ 相加
- 相减
* 乘法
/ 除法
% 取余数
public class Operation { public static void main(String[] args) { int a=5,b=3; System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println(a/b); System.out.println(a%b); } }
运行结果:
类型转换时数据类型的优先级:
byte,short,char<int<long<float<double
运算时,运算的值得类型为参与运算的变量的最高优先级的数据类型,比如:
char a = 'c' + 25 ;//这是错误的,这个时候 'c' + 25 变成了int类型;
int b = 'c' + 25 ;//这是正确的
字符串的+运算时拼接:
比如:
System.out.println("Java"+"66"+6);
运行结果是:
Java666
而当代码为:
System.out.println(6+66+"Java");
运行结果是:
72Java
2.赋值运算符 =
int i = 10;//其中 = 为赋值运算符,把 10 这个值赋给 i。
还有变种,比如 += , -=
int i = 10;
i += 20;//结果 i 的值为30,这个式子的含义是 i = (int)(i + 20);
i -= 10;//原理同上,只不过是加法变成减法,i = (int)(i - 10);由此可推 *=,/=,%=都可以。
举例:
public class Operation { public static void main(String[] args) { int i = 10; i += 10; System.out.println("i += 10 的结果为:"+i); i = 10; i -= 10; System.out.println("i -= 10 的结果为:"+i); i = 10; i *= 3; System.out.println("i *= 3 的结果为:"+i); i = 10; i /= 3; System.out.println("i /= 3 的结果为:"+i); i = 10; i %= 3; System.out.println("i %= 3 的结果为:"+i); } }
运行结果:
3.自增自减运算符 ++与 --
int i = 10;
i++;//运算结束 i 的值变为11;
++i;//运算结束 i 的值变为12;
举例:
public class Operation { public static void main(String[] args) { int i = 10; i++; System.out.println("i++ 的结果为:"+i); ++i; System.out.println("++i 的结果为:"+i); } }
运行结果:
但是他们是有区别的:
public class Operation { public static void main(String[] args) { int i = 10; int j = i++; System.out.println("j 的值为:"+j); System.out.println("i 的值为:"+i); i = 10; int k = ++i; System.out.println("k 的值为:"+k); System.out.println("i 的值为:"+i); } }
运行结果:
根据结果立即推,i++是先参与运算,然后再自加。而++i是先自加,再参加运算的。单独使用++的时候放在变量前面或者后面没有影响,运算完都一样,一旦参与运算的话,要注意其中的分别!
而 -- 也是同理!总结来说,++,--放在变量前边先自加,自减再参加运算,放在变量后边是先参加运算再自加,自减。
4.关系运算符 ;
== 判断两个值是否相等,成立为true,不成立为false
!= 判断两个值是否不等,成立为true,不成立为false
> 判断值a是否大于值b,成立为true,不成立为false
>= 判断值a是否大于等于值b,成立为true,不成立为false
< 判断值a是否小于值b,成立为true,不成立为false
<= 判断值a是否小于等于值b,成立为true,不成立为false
其结果为布尔类型
举例:
public class Operation { public static void main(String[] args) { int a=3,b=3; System.out.println(a==b); System.out.println(a!=b); System.out.println(a>b); System.out.println(a>=b); System.out.println(a<b); System.out.println(a<=b); } }
运行结果:
5.逻辑运算符
任一ε,存在δ>0,当0<|x-x0|<δ时,总有总有|f(x)-A|<ε。
在计算机里面0<|x-x0|<δ不能直接算,要拆分成:0<|x-x0|和|x-x0|<δ,然后再合并为:0<|x-x0| && |x-x0|<δ
其中&&就是逻辑运算符。关系表达式的结果为布尔类型,所以逻辑运算符可以直接连接布尔类型的常量或者变量。
符号
& 逻辑与 关系表达式1&关系表达式2 全部为真则为true,则结果为true,否则全为false(有false则为false)
| 逻辑或 关系表达式1|关系表达式2 有一个为true,则为true,若两个都为false,则为false(有true则为true)
^ 逻辑异或 关系表达式1^关系表达式2 有一个为true或false则为true,若两个全为true或全为false则为false
! 逻辑非 !true为false, !false为true
&& 短路与 关系表达式1&&关系表达式2 计算到第一个为false时,直接给出false,不会进行关系表达式2的运算(有false则为false)
|| 短路或 关系表达式1||关系表达式2 计算到第一个为true时,直接给出true,不会进行关系表达式2的运算(有true则为true)
举例:
public class Operation { public static void main(String[] args) { int a=3,b=5; //逻辑与 System.out.println("逻辑与:"); System.out.println((a<b)&(a<b)); System.out.println((a>b)&(a<b)); System.out.println((a<b)&(a>b)); System.out.println((a>b)&(a>b)); //逻辑或 System.out.println("逻辑或:"); System.out.println((a<b)|(a<b)); System.out.println((a>b)|(a<b)); System.out.println((a<b)|(a>b)); System.out.println((a>b)|(a>b)); //逻辑异或 System.out.println("逻辑异或:"); System.out.println((a<b)^(a<b)); System.out.println((a>b)^(a<b)); System.out.println((a<b)^(a>b)); System.out.println((a>b)^(a>b)); //逻辑非 System.out.println("逻辑非:"); System.out.println((a<b)); System.out.println(!(a<b)); //短路与 与 逻辑与区别 a=3;b=5; boolean c = false && ((a=10)<b); System.out.println(a); a=3;b=5; boolean d = false & ((a=10)<b); System.out.println(a); //短路或 与 逻辑或区别 a=3;b=5; boolean e = true || ((a=10)<b); System.out.println(a); a=3;b=5; boolean f = true | ((a=10)<b); System.out.println(a); } }
结果:
短路与 和 逻辑与 与 逻辑或和短路或的区别就是通过第一个值已经知道结果是不是会运算完的区别。
6.三元运算符:
格式:关系表达式?表达式1:表达式2;
举例:a>b?a:b;
计算关系表达式的值,true则为表达式a的值,false则为表达式2的值。
举例:
public class Operation { public static void main(String[] args) { int a=3,b=5; int c = a>b?0:1; System.out.println(c); int d = a<b?0:1; System.out.println(d); } }
运行结果: