Java语言基础
问题1 用最有效率的方法算出2乘以16等于几?
1-1 问题及解答
在Java程序中,可以通过多种方法计算出2乘以16的值,例如,使用2*16或使用2<<4。那么算出2乘以16最有效率的方法是什么呢?
(1) 由于在计算机中,位运算的效率是最高的,所以要想找出最有效率的运算方法,应该从位运算入手。
(2) Java 语言的位运算中提供了左移、右移和无符号右移运算符,它们分别是<<、>>、>>>。
(3) 左移运算会把操作数变大,它相当于把左侧操作数乘以2的n次幂,这个n是由右操作数决定的。
(4) 而右移运算恰恰相反,它实现的是除法。
使用位运算符计算2乘以16,实现代码如下:
intvalue=2<<4;
1-2 说明
上面的代码段中2<<4就是将2进行左移4位运算,相当于2乘以2的4次方,执行后value的值是32,与2乘以16的值是完全相同的,
但是由于位运算的速度要比乘法运算的速度快,所以2乘以16几最有效率的计算方法应该写成2 << 4。
问题2 如何使用位运算符计算2的n次幂?
问题及解答
在工作中,有时需要计算2的n次幂。如此次数越多,计算起来就越容易出现错误,
例如,计算2的20次幂的结果很容易出现多乘或少乘的情况。那么在程序中该如何使用位运算符计算2的20次幂呢?
int result=1<<20
问题3 final、finally 和finalize有什么区别?
3-1 final
(1) final表示一个修饰符,如果用它来修饰一个类,则该类是不能继承的;
(2) 如果用它来修饰一个变量,则该变量一旦赋值之后就不能再修改;
(3) 如果用它来修饰一个方法,则该方法不能被重写。
3-2 final
finally用于异常处理,它用来修饰一个代码块,即使前面的代码处理异常,该代码块中的代码也会执行。通常用于释放资源。
3-3 finalize
finalize表示Object类中定义的-一个方法, 它可以重写,用于回收资源。
3-4 总结
虽然这3个单词非常相似,但是用途截然不同。
(1) final是一个修饰符,表示不能修改的意思。
(2) finally用在异常捕获中,表示必须执行的代码。
(3) finalize表示一个方法名称与垃圾回收相关。
问题4 问题89 90 91 92
4-1
问题8 在Java语言规范中,对equals()方法有何要求?
8-1 问题及解答
在Java语言中,允许开发者重写equals0方法,但是重写该方法,需要遵循Java语言规范中对它的规定,那么在Java语言规范中,对equals0方法有何要求?
在Java语言规范中,要求equals()方法遵循以下约定:
(1)自反性:对于任何非空引用值x,x.equals(x)都应返回true。
(2)对称性:对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true。
(3)传递性:对于任何非空引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)应返回true。
(4)一致性:对于任何非空引用值x和y,多次调用x.equals(y)始终返回true或始终返回false,前提是对象上equals比较中所用的信息没有被修改。
(5)对于任何非空引用值x,x.equals(null)都应返回 false。
8-1 补充说明
Java语言规范要求equals0方法具有自反性、对称性、传递性、一致性等。
在重写equalsQ方法时,通常也需要重写hashCode()方法。
100