如果有写的不对的地方,欢迎评论指正,相互学习相互进步,谢谢!
如果学过其他语言, Java 的运算符和其他的也差不多,这里介绍一些容易出错的
一、操作符:
Java的操作符和其他的语言一致,加(+)减(-)乘(*)除(/)赋值(=)。在这里不多做阐述,主要讲的还是一些难以理解或者而比较绕的点,比如自加(++)【自减也一样】,优先级,还有逻辑运算符(&&和||),左移右移,==和equals方法的区别,
(一)、自加(++)
++的使用和–一样,这里的话只以++为例子。一般此运算符的使用方法是这样的:a=b++,与之区别的是a=++b。我们知道a++的意思是a=a+1,那么放到赋值语句中有什么不同呢?
—>a=b++:
这类用法的含义是,先使用b,即先把b赋值给a,然后执行b=b+1;如果设立一个中间值temp,可以用代码表示如下:
—>a=++b:
这类用法是,先对b进行自加,b=b+1,然后在进行赋值,a=b,可以用代码表示如下:
这个时候不得不提一下一道面试题:
相信大家第一反应应该是i=10,但是i真的等于10吗,不妨我们把其中的i=i++按照上面简述的展开:
这下大家应该可以发现了,不管循环多少次,i的值都为0,这在笔试面试时经常会出现,算是java的一个自增陷阱。 其实java对该运算的处理也是这样的,会在内存中生成一个临时存储区,即temp来存储变量进行处理。
(二)优先级
java的 运算符优先级 ,参照下表:
优先级
这里需要说明一点,强制类型转化的优先级比应该在1和2之间。例如:
所以,在这里提醒大家在实际开发中,对于摸不准的,要善于运用括号啊
(三)、逻辑运算符(&&和||)
看着这两个就想起&(与),|(或)和^(异或),这里就是转化为二进制按位进行操作,或者是 boolean 类型的对比,这里不详细讲解。
&&(短路与)和||(短路或)两侧加的是表达式,进行true和 false 的判断,遵循以下规则:
& 和 &&的区别
&:无论左边结果是什么,两边都参与运算
&&:当左边为false时,左边不参与运算
| 和 || 的区别
|:无论左边结果是什么,两边都参与运算
||:当左边为ture是,右边不参与运算
逻辑运算有异或,这里有一道题,怎么在不设置临时变量的情况下交换两个数的值,可以用^
结果:
(四)左移右移
左移<< 就是n*2(位数) 实现2的次幂运算
右移>> 就是n/2(位数) 快速运算除以2的次幂
(>>:高位出现空位时,原高位时什么,就补什么)
(>>>:无论高位是什么,都补0(<<<也一样))
(五)==和equals方法的区别
先看一段代码:
可以总结:
1、==:如果两侧是基本数据类型,那么比较的是值(这里需要着重说明一下integer对象在==比较的时候,比如第17行,integer对象会自动拆箱变成int,进行值的比较,所以返回true);如果两侧是对象,那么比较的就是对象在内存中的 地址
2、equals:比较的是两个对象的值是否相等,而不是比较地址
3、需要注意,String字符串想加的时候,会生成一个新的地址去指向结果,所以第14行比较的是地址,返回false。