170道Java工程师面试题-解答11-20
- 11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
- byte 可以,long不可以,String jdk1.7后支持
- byte,short,char都可以隐含转换为int long不能,会丢失精度 String jdk1.7后支持
- 12、用最有效率的方法计算2乘以8?
- 2<<3;
- 13、数组有没有length()方法?String有没有length()方法?
-数组没有length(),用length获取数组长度;String 有;集合用size(); - 14、在Java中,如何跳出当前的多重嵌套循环?
- boolean found =false;
- 外层循环增加found判断 for(int i=0;i<arr.length&&!found;i++)
- 需跳出时执行found=true;break;
- 15、构造器(constructor)是否可被重写(override)?
- 不可以
- constructor(构造器)不能被继承,所以不能被override(重写),但是可以被overloading(重载)。
- 16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
- 对,也不对。Object 有equals方法,如果equals未被重写的化,比较的则是内存地址,则这句话不对,hash code应该相同。如果重写了equals,例如String ,则比较的是对象的值,那么hash code则不同,则这句话对。
- 17、是否可以继承String类?
- 不可以,String 类是用final修饰的,不能被继承
- 18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 是值传递。Java编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。
- 19、String和StringBuilder、StringBuffer的区别?
- String 是final类,没生成一个对象就会在堆中开辟一块内存,不可变字符串
- StringBuffer 可变字符串、效率低、线程安全;
- StringBuilder可变字符序列、效率高、线程不安全;
- 20、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
- 重载 方法名相同,根据参数的个数,参数的类型,顺序区别,java中有构造器重载和方法重载
- 重写 指方法的重写,子类继承父类的方法,可修改方法的实现。重写的规则
- 重写的规则参数列表必须完全与被重写方法的相同; 返回类型必须完全与被重写方法的返回类型相同;访问权限不能比父类中被重写的方法的访问权限更高。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
- 不可以,因为有时只是单纯的调用方法,而不管返回类型。