-
用最有效率的方法计算2乘以8?
2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。移位操作需要了解原码、反码以及补码的知识,存贮在计算机中的都是二进制数据,int 4个字节,一个字节是8位,有符号位。2的原码,第一位是符号位0(0代表正数,1代表负数,别掰掰0既不是正数也不是负数),然后是29个0+10,也就是在Javas中的int数据类型的2在计算机中表示为:000000000000000000000000000010,左移3位变为00000000000000000000000000010000,十进制就是16。 -
&和&&的区别?
&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
- i++与++i的区别是什么?
i++是先赋值在自增;++i是先自增在赋值;
扩展:++/-- 是非线程安全的,也就是说 ++/-- 操作在多线程下可能会引发混乱;原因是因为“++” 操作在多线程下引发混乱的原因:因为 ++ 操作对于底层操作系统来说,并不是一条 CPU 操作指令,而是三条 CPU 操作指令——取值、累加、存储,因此无法保证原子性。