啥是运算符?就是告诉大家,java编程语言中咋做加减乘除等运算的。你写一个加号,java认不认识这是加号啊。诸如此类 到底用 什么符号 表示 各个变量之间的数学或逻辑关系,就是本文的内容。
是不是看到这就觉得很枯燥了?本来想学new 对象的。结果学着学着,学成数学了。头大。
和前一篇文章一样,这些简单枯燥且会伴随你整个职业生涯的的内容,我们就快速带过了。
算数运算符
加减乘数等计算运算符
+ - * /除法 %求余数 ++ --
public static void main(String[] args) {
int num1 = 10,num2 = 5;
int result;
result = num1 + num2;
System.out.println(num1+"+"+num2+"="+result);
System.out.println(num1+num2); //相加
System.out.println(""+num1+num2);//字符串连接
//参与 / 运算的两个操作数都是整数,就是整数除法,否则都是浮点数除法
System.out.println(13/5); //2
System.out.println(13.0/5); //2.6
System.out.println(13%5); //3
System.out.println(-13%5);//-3
System.out.println(-13%-5);//-3
System.out.println(13%-5);//3
System.out.println(13.0%5); //3.0
System.out.println(13.5%5); //3.5
System.out.println(13.5%0); //NaN
}
赋值运算符
把一个值,付给一个变量。
= 从右往左运算,左边是一个变量
int n = 5
+=,-= ,*=,/=等等
关系运算符
用于判断大于,小于,等于不等于 等等这些运算符。字符之间进行比较时,比较的是ASSIC码值
== !=
> >=
< <=
逻辑运算符
⚠️:逻辑运算符,操作的都是布尔类型,用于逻辑判断,这是区分逻辑运算符和位运算符的关键点。
逻辑运算符连接一个或多个条件,判断这些条件是否成立
逻辑运算符的结果是布尔类型
- 与运算:逻辑
&, 短路&& - 或运算:逻辑
|,短路|| - 非运算:
! - 异或:
^(不同为true,相同为false)
双
&&和单&的区别:
双 表示短路逻辑运算符
public static void main(String[] args) {
int n = 3;
boolean b = (3>7)&(n++<2);
System.out.println("b="+b+" n="+n);
//先算3>7为false
//再算n<2为false
//n++,n=4
//输出,b = false,n=4
int nn = 3;
boolean bb = (3>7)&&(nn++<2);
System.out.println("bb="+bb+" nn="+nn);
//先算3>7为false
//由于前面的逻辑判断足够了,不需要后面再进行计算了
//输出,bb = false,nn=3
}
条件运算符
java中条件运算符是三目运算符
布尔表达式?结果表达式1:结果表达式2
当布尔表达式为真时,返回表达式1,否则,返回表达式2
位运算符
⚠️:位运算符操作的都是数值类型,这是区分位运算符合逻辑运算符的关键点。
基于Bit进行运算的运算符,在二进制补码基础上直接运算,运算效率高,可读性差。
左移运算<<:
4<<3:4的二进制左移3位
00000100
00100000
相当于,4 * 2^3 = 32
@Test
public void test0b(){
int a = 0b00000100;
System.out.println(a); //4
a=a<<3;
System.out.println(a); //32
}
右移运算>>
32>>4:32的二进制右移4位
00100000
00000010
相当于,32 / 2^4 = 2
-32>>4:-32的二进制右移4位
原码:10100000
反码:11011111
补码:11100000
右移4位(补1)
补码:11111110
反码:11111101
原码:10000010
结果等于 -2
无符号右移>>>
不管符号位,左边全补0
-32>>>4:-32的二进制无符号右移4位
原码:10000000 00000000 00000000 00100000
反码:11111111 11111111 11111111 11011111
补码:11111111 11111111 11111111 11100000
右移:00001111 11111111 11111111 11111110
最高位是0 是整数,直接算出结果
按位与&
按位或|
按位异或^
按位取反~
//交换两个变量的值
public class ChangeValue {
public static void main(String[] args) {
//利用运算符交换两个变量的值(抛砖引玉)
int num1 = 10;
int num2 = 20;
// num1 = num1 + num2; // num1= 全部的和 num2 = num2
// num2 = num1 - num2; // 全部的和 -num2 = num1 付给了 num2。num2就是原来的num1了
// num1 = num1 - num2;//全部的和 - num2(原来的num1) = 原来的num2
// System.out.println(num1);
// System.out.println(num2);
//思想类似,利用位运算符交换两个变量的值(我是玉)
//num1 根据num2 变成了一个中间值 00001010 ^ 00010100
num1 = num1 ^ num2;
//num1 根据num2 又变回了原来的值 但是结果付给了num2 此时 num2为num1原来的值
num2 = num1 ^ num2;
//以前: num1 根据 num2 得到 中间值。现在:中间值 根据 num1 得到num2 付给 num1
num1 = num1 ^ num2;
}
}
运算符优先级
数字越大,优先级越大。9>8>7>6>5>4>3>2>1
| 运算符 | 说明 | 优先级 |
|---|---|---|
| () | 小括号 | 9 |
| !、++、-- | 逻辑非、自增、自减 | 8 |
| *、/、% | 乘法、除法、取余 | 7 |
| +、- | 加法、减法 | 6 |
| <、<=、>、>= | 小于、小于等于、大于、大于等于 | 5 |
| ==、!= | 等于、不等于 | 4 |
| && | 逻辑与 | 3 |
| || | 逻辑或 | 2 |
| =、+=、-= | 各种赋值运算符 | 1 |
不用背诵这个表。只要记住,()优先级最大,乘除大于加减 赋值优先级最低。基本就不影响你写代码了。其他的,心里有个数就行,用到的时候再百度就好了