黑马程序员Java试题、50道Java面试题集(2019最新版)11-20 联系客服

发布时间 : 星期日 文章黑马程序员Java试题、50道Java面试题集(2019最新版)11-20更新完毕开始阅读dbbc9af34493daef5ef7ba0d4a7302768e996f47

【黑马程序员】Java试题、50道Java面试题集(2019

最新版)11-20

以下的内容是对原有的和最近Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,相对来说比较经典,相信对准备入职的Java程序员一定有所裨益。

11、swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

答:早期的JDK中,switch(expr)中,expr可以是byte、short、char、int。从1.5版开始,Java中引入了枚举类型(enum),expr也可以是枚举,从JDK 1.7版开始,还可以是字符串(String)。长整型(long)是不可以的。

12、用最有效率的方法计算2乘以8?

答: 2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。

补充:我们为编写的类重写hashCode方法时,可能会看到如下所示的代码,其实我们不太理解为什么要使用这样的乘法运算来产生哈希码(散列码),而且为什么这个数是个素数,为什么通常选择31这个数?前两个问题的答案你可以自己百度一下,选择31是因为可以用移位和减法运算来代替乘法,从而得到更好的性能。说到这里你可能已经想到了:31 * num <==> (num << 5) - num,左移5位相当于乘以2的5次方(32)再减去自身就相当于乘以31。现在的VM都能自动完成这个优化。

视频库网址:http://yun.itheima.com 资料领取:3285264708

1 package com.loonstudio; 2

3 public class PhoneNumber { 4 private int areaCode; 5 private String prefix; 6 private String lineNumber; 7

8 @Override

9 public int hashCode() { 10 final int prime = 31; 11 int result = 1;

12 result = prime * result + areaCode; 13 result = prime * result

14 + ((lineNumber == null) ? 0 : lineNumber.hashCode()); 15 result = prime * result + ((prefix == null) ? 0 : prefix.hashCode()); 16 return result; 17 } 18

19 @Override

20 public boolean equals(Object obj) { 21 if (this == obj)

视频库网址:http://yun.itheima.com 资料领取:3285264708

22 return true; 23 if (obj == null) 24 return false;

25 if (getClass() != obj.getClass()) 26 return false;

27 PhoneNumber other = (PhoneNumber) obj; 28 if (areaCode != other.areaCode) 29 return false;

30 if (lineNumber == null) { 31 if (other.lineNumber != null) 32 return false;

33 } else if (!lineNumber.equals(other.lineNumber)) 34 return false; 35 if (prefix == null) { 36 if (other.prefix != null) 37 return false;

38 } else if (!prefix.equals(other.prefix)) 39 return false; 40 return true; 41 } 42

43 } //何问起 hovertree.com

视频库网址:http://yun.itheima.com 资料领取:3285264708

13、数组有没有length()方法?String 有没有length()方法?

答:数组没有length()方法,有length 的属性。String 有length()方法。JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆。

黑马程序员视频库网址:http://yun.itheima.com(海量热门编程视频、资料免费学习) 学习路线图、学习大纲、各阶段知识点、资料网盘免费领取+QQ 3285264708 / 3549664195

14、在Java 中,如何跳出当前的多重嵌套循环?

答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。(Java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,但是就像要避免使用goto一样,应该避免使用带标签的break和continue,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用,所以这种语法其实不知道更好)

15、构造器(constructor)是否可被重写(override)?

答:构造器不能被继承,因此不能被重写,但可以被重载。

16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)

视频库网址:http://yun.itheima.com 资料领取:3285264708