面试题(11-20)

switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?

  • 在Java5以前,switch(expr)中,expr只能是byteshortcharint类型
  • 从Java5开始,Java中引入了枚举类型,expr也可以是enum类型
  • 从Java7开始,expr还可以是String类型,但是长整型(long)在目前所有的版本中都是不可以的

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

​ 2<<3:2左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方

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

  • 数组没有length()方法,有length属性
  • String有length()方法
  • JavaScript中,获得字符串的长度是通过length属性得到的

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

  • 在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环
  • Java中支持带标签的breakcontinue语句,作用有点类似于C和C++中的goto语句
  • 不建议使用该方法

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

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

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

​ 不对

​ 如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于equals方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode值相同,它们并不一定相同。

​ 如果违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大降低(如果哈希码频繁的冲突将会造成存取性能急剧下降)。

实现高质量的equals方法的诀窍包括

  • 使用==操作符检查参数是否为这个对象的引用
  • 使用instanceof操作符检查参数是否为正确的类型
  • 对于类中的关键属性,检查参数传入对象的属性是否与之相匹配
  • 编写完equals方法后,检查是否满足对称性、传递性、一致性
  • 重写equals方法时总是要重写hashCode方法
  • 不要将equals方法参数中的Object对象替换为其他的类型,在重写时不要忘记@Override注解

是否可以继承String类?

String类是final类,不可以被继承。

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

​ 是值传递,Java语言的方法调用只支持参数的值传递

​ 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。

StringStringBuilderStringBuffer的区别?

  • String是只读字符串,即String引用的字符串内容是不能被改变的
  • StringBuilder/StringBuffer类表示的字符串对象可以直接进行修改
  • StringBuilder是Java5引入的,它和StringBuffer的方法完全相同,区别在于它是单线程环境下使用的,因为它的所有方法都没有被synchronized修饰,因此它的效率比StringBuffer要高

重载(overload)和重写(override)的区别。重载的方法能否根据返回类型进行区分?

  • 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性
  • 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载
  • 重写发生在子类与父类之间,重写要求子类重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)
  • 重载对返回类型没有特殊的要求
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值