【Java】运算符 / 操作符

Java运算符

2021/2/28 周日
复习内容: 算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符

如有错误,欢迎在评论区指出,非常感谢!


运算符(操作符)就是对数据进行处理的方式

在进行混合类型运算时,会进行类型转换,结果会自动转换成类型最宽的那个类型:
byte -> short -> int -> long -> float -> double
char -> int

一、算术运算符

+  -  *   /   %         ++   --
加 减 乘  除  取模(求余) 加1  减1
  1. byte\short\char在进行算术运算(除++ --以外)时,都将转换成int

  2. 任何数据都可以转换成字符串,当字符串中使用+时,其实是字符串拼接

  3. 算术运算符是从左往右进行运算,所以以下结果将不一样

    int+int+String
    String+int+int

    如 int a = 10; int b = 20;
    a + b + “c” 的结果为 30c
    “c” + a + b 的结果为 c1020

  4. 乘法 *
    以下结果不一样
    long a = 365 * 24 * 60 * 60 * 1000 * 100L; // 147,122,892,800
    long b = 365L * 24 * 60 * 60 * 1000 * 100; // 3,153,600,000,000

    a在最后乘以100L之前,一直是以int进行计算,由于前面的乘积31,536,000,000远大于int的最大值2,147,483,647,会出现数据溢出,即使最后再乘一个long类型的100L,计算结果也已经不准确了。

    所以当乘法预计结果会比较大的时候,最好一开始就指定数据类型365L,让整个表达式都以long来计算。

  5. 除法 /

    对于整数除法,结果是整除

    以下结果不一样
    double c = 10/3; // 3.0
    double d = 1.0*10/3; // 3.3333333333333335

    与前面一样,c是先以int运算再转化成double,对于int整数,/为取整;d是直接转换成了double来进行计算。

  6. 取模(求余)%

    求余数。java中,对于浮点类型也可以进行求余运算。用途:

    (1) 判断是否整除,若m能够被n整除,则余数为0
    9能够被3整除,所以 9%3 == 0 结果为true;而10%3 == 0 结果为false

    (2) 判断m是不是偶数,偶数能够被2整除

  7. 自增运算符 ++

    如果x的初始值都为1
    ++x; // 前加加 x = x+1;
    x++; // 后加加 x = x+1;

    前后++的本质:
    z = ++x; // 即 x = x+1; z = x; 运算后x的值为2,z的值也为2
    z = x++; // 即 z = x; x = x+1; 运算后x的值为2,但z的值为1

在同一个表达式中,不应该对同一个变量进行多次自增减运算

前面说过byte\short\char在进行除++ --以外的算术运算时会转换成int ,而在++ – 运算时,其数据类型不变。

byte b = 1;
++b; // 没问题
b = b+1; // 会报错 

因为=右边b+1中的1默认为int型,所以b+1的结果是int型,但=左边的b在上面声明的是byte类型,int无法自动转为byte,所以报错。可以使用强制类型转换:

b= (byte)(b+1);

java中对浮点类型也是可以进行自增减运算的

double b = 1.5;
++b; 
// b的值为2.5
  1. 自减运算符 - -

    –x; 前减减 x = x-1;
    x–; 后减减 x = x-1;

    性质特点与++类似

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

关系运算符 >  >=  <  <=   !=   ==

关系运算符的结果是boolean类型,其值只会是true或者false

x > y , 如果x>y成立则为true,否则为false

关系要么成立(true),要么不成立(false),应用于条件判断

注意,x == y 是判断相等,这里有两个=等号。而Java中一个=等号是赋值语句

三、逻辑运算符 && || !

&& 逻辑与 ; || 逻辑或 ; ! 逻辑非 (逻辑取反)

在编程过程中,逻辑运算符多数情况下都是连接关系运算符(结果是true或者false)

x       y           x&&y       x||y       !x
true    true        true       true       false
true    false       false      true       false
false   true        false      true       true
false   false       false      false      true

总结:
&&: 只有当&&两边的结果都为true时结果才为true
| | : 只要两边有一个为true结果就为true

短路特性:如果逻辑运算符右边的结果,对整个表达式的结果无法产生影响时,将不再运算

  • &&连接的多个表达式是从左往右运算,如果&&左边的表达式的结果为false时,&&右边的表达式将不会再进行运算

    false&&epxr 中epxr不会运行到

  • | | 连接的多个表达式,如果||左边表达式的结果为true时,||右边的表达式将不再进行运算

    true | | expr 中epxr不会运行到

四、赋值运算符

=   +=  -=   *=  /=  %=  

= 给变量赋值 让变量保存某个数据

num *= x; // 相对于 num = num*x;  
num /= x; // 相对于 num = num/x;

注意num一定是在运算符的左边

五、位运算符

&  |  ^   ~   >>   >>>   <<

按位(二进制位)进行运算

1. & 按位与

二进制位:1&1=1 ; 1&0=0 ; 0&1=0 ; 0&0=0

如 int x=10,y=20;
x&y; 表示 x和y的二进制相同的位进行按位与运算

10 : 00000000 00000000 00000000 00001010
20 : 00000000 00000000 00000000 00010100
得 : 00000000 00000000 00000000 00000000
所以 x&y 的值为0

定理:
-1&num = num 因为-1的补码为 11111111 11111111 11111111 11111111
0&num = 0 因为0的补码为 00000000 00000000 00000000 00000000

2. | 按位或

二进制位:1|1=1; 1|0=1 ; 0|1=1; 0|0=0
定理:
-1|num = -1
0|num = num

3. ^ 按位异或,不相同则为1

二进制位:1^1=0; 1^0=1; 0^1=1; 0^0=0
定理:
num^num = 0
0^num = num
-1^num = -(num+1)

利用异或可以还实现交换算法而不必使用临时变量,例:
num1 = num1 ^ num2;
num2 = num2 ^ num1;
num1 = num1 ^ num2;
结果是num1和num2的值进行了交换

4.~ 按位取反

二进制位:~0=1 ; ~1=0
-1^num = ~num = -(num+1) = -num-1
~num+1 = -num 负数求补码

5.>> 带符号循环右移

右边移出的位舍弃,左边空出的位补符号位
num>>n == num>>(n%32) == num/2^(n%32)
每向右移一位相当于除以2(除去负的奇数)

6.>>> 无符号循环右移

右边移出的位舍弃,左边空出的位补0

7.<< 循环左移

左边移出的位舍弃,右边空出的位补0
每向左移一位相当于乘以2

将位运算符组合,可以用于求平均值
假设有x y 两个整数
int z = (x&y)+((x^y)>>1);
z的结果为(x+y)/2

六、条件运算符 ?:

又叫三目运算符或三元运算符,其操作数有三个

expr1?expr2:expr3;

表示如果expr1结果为true,则该表达式的结果为expr2的结果,否则为expr3的结果

七、其它

分量运算符 .,
下标运算符 []
实例运算符 instanceof 检查是否是某个类的对象
方法调用运算符()

八、运算符的优先级:

一般来说,优先级是:
算术 > 位
算术 > 关系 > 逻辑

有时无法确定运算符的优先级,所以编程时一般会使用()来确定优先级的顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值