Java语言基础

131 阅读3分钟

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