我们都知道String和StringBuffer是不同的,因为String类是内容不可变的字符串,而StringBuffer类表示内容可以被改的字符串。更进一步我们就不知道了。
其实,还有String覆盖了equals方法和hashCode方法,而StringBuffer没有,所以将StringBuffer对象存进集合类中会出现问题。
一时不解,以为存进集合会有什么问题,结果代码测试了一遍没有发生错误。
ArrayList al = new ArrayList();
al.add(new StringBuffer("haha"));
System.out.print(al.remove(0));
顺利执行了,接着我就想了,原来是集合里面的比较会发生错误,测试代码如下
ArrayList al = new ArrayList();
al.add(new StringBuffer("haha"));
if(!al.contains(new StringBuffer("haha"))){
System.out.println("看样子StringBuffer没有覆盖equals方法和hashCode方法!");
}
这下就发生错误了,本来集合里面就有“haha”这个字符串了,当再new一个“haha”字符串出来的时候应该返回true,再取下反应该是syso语句不会被执行,可是语句打印出来了,这就说明了Stringbuffer没有覆盖两个方法!
|