java面试打击后归来深刻总结分析
2016-12-16 14:27
330 查看
1、String和StringBuffer问题:面试管:用String和操作符“+”来连接就可以了,干嘛还用StringBuffer? 我:懵……………………….
检讨:for Example:String result =”aaa” +”bbb” +”ccc”; vs String result = new StringBuffer.append(“aaa”).append(“bbb”).append(“ccc”).toString();
对于String类型,它是储存在内存常量区的,so不会被Gc,可以认为其一直存在,String类型的+操作每进行一次就会保存在常量区一次,但我们只需要执行完最后一次+操作的数值,所以浪费了很多内存;
对于StringBuffer来说,new一个后它是储存在堆内存上的,并且只有一个,append操作只操作这一个对象,将其toStirng()后则保存在常量区(只有一份储存),然后该StringBuffer对象被GC;
2、hashCode的作用:
hashCode仅用于HashMap、Hashtable及HashSet储存数据时识别不同对象时,当你自定义一个类时,需重写其equals()方法,最好一起重写hashCode()方法(万一该对象用于hash类型的储存呢?)
for example:
new一个类:如下,假如我仅对于该类相等的条件是两个Fujian对象的name相等,我完全可以只重写下边的equals()方法(Object默认的equals()对比的是两个对象的内存地址);但假如我要将两个new Fujian对象存到HashSet中去呢?如果不重写hashCode()方法,则默认为对象的内存地址对比,两个new出来的对象在内存中地址肯定不一样啦,不重写hashCode()的话则他们虽然equals(equals()方法被重写)但hashCode不一样啊,这样储存到HashSet中就成了两个不同的对象,想想也够矛盾的,两个对象equals但储存却是不同的对象,so重写equals方法也要重写hashCode方法
3、catch语句和finally语句同时存在return,哪一个起作用
只需掌握一点:finall语句总要执行,那么catch语句执行到renturn之前finall语句必须要执行,否则catch语句一renturn那么finally语句就没机会执行了,so当catch语句和finally语句同时存在return时catch语句执行到return前先去执行finally,finally里又有return,则catch中的return就没机会执行了。
答案就是:
检讨:for Example:String result =”aaa” +”bbb” +”ccc”; vs String result = new StringBuffer.append(“aaa”).append(“bbb”).append(“ccc”).toString();
对于String类型,它是储存在内存常量区的,so不会被Gc,可以认为其一直存在,String类型的+操作每进行一次就会保存在常量区一次,但我们只需要执行完最后一次+操作的数值,所以浪费了很多内存;
对于StringBuffer来说,new一个后它是储存在堆内存上的,并且只有一个,append操作只操作这一个对象,将其toStirng()后则保存在常量区(只有一份储存),然后该StringBuffer对象被GC;
2、hashCode的作用:
hashCode仅用于HashMap、Hashtable及HashSet储存数据时识别不同对象时,当你自定义一个类时,需重写其equals()方法,最好一起重写hashCode()方法(万一该对象用于hash类型的储存呢?)
for example:
new一个类:如下,假如我仅对于该类相等的条件是两个Fujian对象的name相等,我完全可以只重写下边的equals()方法(Object默认的equals()对比的是两个对象的内存地址);但假如我要将两个new Fujian对象存到HashSet中去呢?如果不重写hashCode()方法,则默认为对象的内存地址对比,两个new出来的对象在内存中地址肯定不一样啦,不重写hashCode()的话则他们虽然equals(equals()方法被重写)但hashCode不一样啊,这样储存到HashSet中就成了两个不同的对象,想想也够矛盾的,两个对象equals但储存却是不同的对象,so重写equals方法也要重写hashCode方法
class Fujian{ String name= "linfujian"; int age; public void setAge(int age){ this.age=age; } public int getAge(){ return age; } public String toString(){ return this.name; } public boolean equals(Object obj){ if(obj instanceof Fujian){ Fujian fujian = (Fujian)obj; return (name.equals(fujian.name)); } return super.equals(obj); } public int hashCode(){ return name.hashCode(); } }
3、catch语句和finally语句同时存在return,哪一个起作用
public static void main(String[] args){ System.out.println(foo()); } public static int foo(){ int result; try { result = 10; result = result/0; } catch (Exception e) { System.out.println("Exception"); result = -1; return result; } finally { result = 100; System.out.println("it alaways do!"); return result; } }
只需掌握一点:finall语句总要执行,那么catch语句执行到renturn之前finall语句必须要执行,否则catch语句一renturn那么finally语句就没机会执行了,so当catch语句和finally语句同时存在return时catch语句执行到return前先去执行finally,finally里又有return,则catch中的return就没机会执行了。
答案就是:
Exception it alaways do! 100
相关文章推荐
- JAVA常用数据结构及原理分析(面试总结)转载
- JAVA常用数据结构及原理分析(面试总结)
- JAVA常用数据结构及原理分析(面试总结)
- Java的WEB应用性能问题定位方法总结(一):常见的性能指标分析
- 三年经验java开发人员面试总结。
- 面试总结与分析(一)
- java面试一些总结
- 基于JAVA平台的框架分析总结
- 淘宝面试归来总结
- Java面试小总结
- 华为面试归来-笔试总结
- [转]一个面试官对面试问题的分析(Java工程师)
- java面试大总结(1)
- 这几天面试Java程序员的总结
- 淘宝面试归来总结
- 三年经验java开发人员面试总结
- java面试汇总(总结了所有的面试中可能出现的题目)
- java面试大总结(4)
- 面试回笔,以示记念(2),中兴归来,前期策略分析
- Java面试中关于String的问题总结