版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、【黑马程序员】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也可以是枚举,从JDK1.7版开始,还可以是字符串(String )。长整型(long )是
2、不可以的。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都能自动完成这个优化。
3、视频库网址:视频库网址:资料领取:3285264708传智播客旗下 高端IT教育品牌改变中国IT教育,我们正在行动package com .loon studio;2public class Phon eNumber private int areaCode;private Stri ngprefix;private Stri nglin eNumber;7Overridepublic int hashCode() final intprime = 31;int result = 1;result =prime * result + areaCode;result =prime * resul
4、t+ (li neNumber = n ull) ? 0 : lin eNumber.hashCode();result = prime * result + (prefix = null) ? 0 : prefix.hashCode();return result;18Overridepublic boolea n equals(Object obj) if (this = obj)视频库网址:资料领取:视频库网址:资料领取:328526470822232425262728293031323334353637383940414243return true;if (obj = n ull)re
5、turn false;if (getClass() != obj.getClass()return false;Phon eNumber other = (Ph on eNumber) obj;if (areaCode != other.areaCode) return false;if (li neNumber = n ull) if (other.li neNumber != n ull)return false; else if (!li neNumber.equals(other.li neNumber) return false;if (prefix = n ull) if (oth
6、er.prefix != n ull)return false; else if (!prefix.equals(other.prefix)return false;return true;/可问起 视频库网址:资料领取:视频库网址:资料领取:328526470813、数组有没有 length。方法?String 有没有 length。方法?答:数组没有length()方法,有length的属性。String有length()方法。JavaScript中获得字符串的长度是通过length属性得到的这一点容易和Java混淆。黑马程序员视频库网址: (海量热门编程视频、资料免费学习)学习路线图、学
7、习大纲、各阶段知识点、资料网盘免费领取+QQ 3285264708 / 354966419514、在Java中,如何跳出当前的多重嵌套循环?答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。(Java 中支持带标签的break和continue语句,乍用有点类似于C和C+ +中的goto 语句,但是就像要避免使用goto 样,应该避免使用带标签的break和 continue,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用, 所以这种语法其实不知道更好)15、构造器(constructor )是否可被重写( override) ?答:构造器不能被继承,因此不能
8、被重写,但可以被重载。16.两个对象相同(x.equals(y) = true)但却可有不同的hash16.两个对象code,这句话对不对?答:不对,如果两个对象X和y满足x.equals(y)二二true ,它们的哈希码(hash code )应当相同。Java对于eqauls方法和hashCode方法是这样规定的:视频库网址:资料领取:视频库网址:资料领取:3285264708如果两个对象相同(equals方法返回true ),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。当然,你未必 要按照要求去做,但是如果你违背了上述原则就会发现在
9、使用容器时,相同的对 象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存 储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。补充:关于equals和hashCode方法,很多Java程序都知道,但很多人也就 是仅仅知道而已,在Joshua Bloch的大作Effective Java(很多软件公司, Effective Java、Java编程思想以及重构:改善既有代码质量是Java 程序员必看书籍,如果你还没看过,那就赶紧去亚马逊买一本吧)中是这样介绍 equals方法的:首先equals方法必须满足自反性(x.equals(x)必须返回true )、 对称性(x
10、.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 xequals(null)必须返回false。 实现高质量的equals方法的诀窍包括:1.使用=操作符检查“参数是否为这 个对象的引用”;2.使用instanceof操作符检查“参数是否为正确的类型”;3.对于类中的关键属性,检查参数传入对象的属性是否与之
11、相匹配;4.编写完 equals方法后,问自己它是否满足对称性、传递性、一致性;5.重写equals 时总是要重写hashCode ; 6.不要将equals方法参数中的Object对象替换为 其他的类型,在重写时不要忘掉Override注解。17、是否可以继承String类?视频库网址:视频库网址:资料领取:3285264708答:String类是final类,不可以被继承。补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是 关联(HAS-A )而不是继承(IS-A )。黑马程序员视频库网址: (海量热门编程视频、资料免费学习)学习路线图、学习大纲、各阶段知识点
12、、资料网盘免费领取+QQ 3285264708 /354966419518、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果用B么这里到底是值传递还是引用删?答:是值传递。Java编程语言只有值传递参数。当一个对象实例作为一个参数 被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过 程中被改变,但对象的引用是永远不会改变的。C+和C#中可以通过传引用或 传输出参数来改变传入的参数的值。补充:Java中没有传引用实在是非常的不方便,这一点在Java 8中仍然没有得 到改进,正是如此在Java编写的代码中才会出现大量的Wrapper类(将需
13、要 通过方法调用修改的引用置于一个Wrapper类中,再将Wrapper对象传入方 法),这样的做法只会让代码变得臃肿,尤其是让从C和C+转型为Java程序 员的开发者无法容忍。19、String 和 StringBuilder、StringBuffer 的区别?网址:网址:资料领取:3285264708答:Java平台提供了两种类型的字符串:String和StringBuffer /StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer和StringBuilder类表示的字符串对象可
14、以直接进行修改。StringBuilder是JDK 1.5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer 略高。补充1有一个面试题问有没有哪种情况用+做字符串连接比调用StringBuffer/ StringBuilder对象的append方法性能更好?如果连接后得到的字符串在静态存储区中是早已存在的,那么用+做字符串连接是优于StringBuffer /StringBuilder 的 append 方法的。补充2 :下面也是一个面试题,问程序的输出,看看自己
15、能不能说出正确答案。package com .lo vo;何问起 public class Stri ngEqualTest public static void main( Str in g args) Stri ng a = Programmi ng;Str ing b = new Stri ng(Programmi ng);Stri ng c = Program + mi ng;视频库网址:视频库网址:资料领取:3285264708传智播客旗下 高端IT教育品牌改变中国IT教育,我们正在行动System.out.pr intln(a = b);System.out.pr in tl n(
16、a = c);System.out.pri ntl n(a.equals(b);System.out.pr intln (a.equals(c);System.out.pr intln (a.i nter n() = b.i nter n();黑马程序员视频库网址: (海量热门编程视频、资料免费学习)学习路线图、学习大纲、各阶段知识点、资料网盘免费领取+QQ 3285264708 /354966419520、重载(Overload )和重写( Override)的区别。重载的方法能否根据返回类型进行区分?答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多 态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果 有不同的参
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版一年级下册数学第五单元 加与减(二) 测试卷及参考答案(黄金题型)
- 煤炭开采引发地质灾害调查报告(6篇)
- 关于大学生暑假实习心得
- 湖南省常德市2023-2024学年五年级上学期语文期末试卷(含答案)
- 解除租房合同需要哪些条件
- 诚信代理服务合同机构
- 诚恳道歉自白书
- 语文大专班试题
- 语文要素教学的策略与实践
- 购房合同中的交房时间
- (病理科)PDCA提高术中病理诊断及时率
- 北师大版-八年级数学上册期末培优训练:二元一次方程组(含答案)
- 项目服务合同协议
- LED灯具使用说明书使用说明书
- 巴斯蒂安成人钢琴教程第一册
- 肿瘤多学科联合诊疗会诊记录
- 人工智能导论智慧树知到课后章节答案2023年下哈尔滨工程大学
- 医院医保基金使用内部管理制度
- 国家开放大学《营销管理》形考任务1-4参考答案
- 《谁是最可爱的人》说课课件
- 苏教版小学数学2二年级(上册)期末检测试卷【8套】
评论
0/150
提交评论