好文档 - 专业文书写作范文服务资料分享网站

【黑马程序员】Java试题、50道Java面试题集(2019最新版)11-20

天下 分享 时间: 加入收藏 我要投稿 点赞

【黑马程序员】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

如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。

补充:关于equals和hashCode方法,很多Java程序都知道,但很多人也就是仅仅知道而已,在Joshua Bloch的大作《Effective Java》(很多软件公司,《Effective Java》、《Java编程思想》以及《重构:改善既有代码质量》是Java程序员必看书籍,如果你还没看过,那就赶紧去亚马逊买一本吧)中是这样介绍equals方法的:首先equals方法必须满足自反性(x.equals(x)必须返回true)、对称性(x.equals(y)返回true时,y.equals(x)也必须返回true)、传递性(x.equals(y)和y.equals(z)都返回true时,x.equals(z)也必须返回true)和一致性(当x和y引用的对象信息没有被修改时,多次调用x.equals(y)应该得到同样的返回值),而且对于任何非null值的引用x,x.equals(null)必须返回false。实现高质量的equals方法的诀窍包括:1. 使用==操作符检查“参数是否为这个对象的引用”;2. 使用instanceof操作符检查“参数是否为正确的类型”;3. 对于类中的关键属性,检查参数传入对象的属性是否与之相匹配;4. 编写完equals方法后,问自己它是否满足对称性、传递性、一致性;5. 重写equals时总是要重写hashCode;6. 不要将equals方法参数中的Object对象替换为其他的类型,在重写时不要忘掉@Override注解。

17、是否可以继承String 类?

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

【黑马程序员】Java试题、50道Java面试题集(2019最新版)11-20

【黑马程序员】Java试题、50道Java面试题集(2019最新版)11-20以下的内容是对原有的和最近Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,相对来说比较经典,相信对准备入职的Java程序员一定有所裨益。11、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
推荐度:
点击下载文档文档为doc格式
8knmi9hpjn8jj329nz0t2wkqq4mj6h00lzb
领取福利

微信扫码领取福利

微信扫码分享