解决方案 »

  1.   

    string类重写的equals方法要求参数必须为string类型,stringbuffer没有重写equals方法,调用的是object的equals方法
      

  2.   

    A不会有编译错误
    B两个确实有不同的对象类型,但不会报编译错误
    CStringBuffer有equals(),不会跑出异常
    DOK的
    另:如果s1 = s1.toString(),就会抛异常
      

  3.   

    其实equals是Object的方法。所有类都默认继承Object,而String重写了equals方法。
    但是StringBuffer没有重写equals,由于继承了Object类,所有其非私有方法也继承过了,执行的时候会调用Object的equals方法。
    而Object的equals方法就是简单的使用 ==。
     
    public boolean equals(Object obj) {
    return (this == obj);
        }
    所有第5行的s1.equals(s)返回的是false。因为两个对象的地址值不同。