几道自己不会的面试题(很简单)

[size=large][color=red]1.下面输出的结果是[/color][/size]
Integer i1 = 127;  
Integer i2 = 127;
System.err.println(i1 == i2);
i1 = 128;
i2 = 128;
System.err.println(i1 == i2);

false
true

Integer类的源码:
 static final Integer[] cache = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length ; i++){
cache[i] = new Integer(i - 128);
}
}

从上面代码可以看出系统把-128~127之间的整数自动装箱成Integer实例,并放入一个名为cache的数组缓存起来,如果把一个-128~127之间的整数自动装箱成一个Integer实例,实际上就是直接指向数组元素,所以相等;但每次把一个不在-128~127的范围内整数自动装箱成Integer实例时,系统需重新创建一个Integer实例。【ps:参考《疯狂java讲义》】
或者详细可见http://www.ticmy.com/?p=110
[size=large][color=red]2.如何将list中的值去重复且顺序不变[/color][/size]
1)网上比较常见的做法
public static List<String> removeDuplicateWithOrder(List<String> list) {
HashSet<String> hashSet = new HashSet<String>();
List<String> newlist = new ArrayList<String>();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
String element = (String) iterator.next();
if (hashSet.add(element)) {
newlist.add(element);
}
}
list.clear();
list.addAll(newlist);
return list;
}

2)比较简单的一种做法
java.util.LinkedHashSet set = new LinkedHashSet(mylist);
ArrayList newList = new ArrayList(set);

LinkedHashSet原理可见:http://zhangshixi.iteye.com/blog/673319
顺便把list顺序不要求的代码也贴出来
public static void removeDuplicate(ArrayList arlList) 
{
HashSet h = new HashSet(arlList);
arlList.clear();
arlList.addAll(h);
}

[size=large][color=red]3.StringBuffer题[/color][/size]
public static void main(String args[]){
StringBuffer s1 = new StringBuffer("A");
StringBuffer s2 = new StringBuffer("B");
isMathod(s1,s2);
System.out.println(s1+"======="+s2);

}
public static void isMathod(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}

输出结果是:AB=======B
[color=red]原因自己也不知,希望知道的朋友解答一下[/color]
顺便说说StringBuilder与StringBuffer的区别
其实两个的操作都相同,只不过StringBuilder不同步不安全的,但执行速度也更快,StringBuffer同步的,相对StringBuilder更慢些
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值