StringBuffer代码:
- StringBuffer sb = new StringBuffer("aaa");
- StringBuffer sb1 = new StringBuffer("aaa");
- if(sb.equals(sb1)){
- Print.out("相等");
- }else{
- Print.out("不等");
- }
- if(sb == sb1){
- Print.out("相等");
- }else{
- Print.out("不等");
- }
运行结果:
不等
不等
StringBuffer的equals是 使用了父类Obejct的equals源码:
- public boolean equals(Object obj) {
- return (this == obj);
- }
可见判断的是内存地址是否相同。所以也不等
StringBuffer的==判断的是对象是否相等 显然sb与sb1不是同一个对象
===========================
String:
- String s1 = new String("aa");
- String s2 = new String("bb");
- String s3 = new String("aa");
- if(s1.equals(s3)){
- Print.out("相等");
- }else{
- Print.out("不等");
- }
- if(s1 == s3){
- Print.out("相等");
- }else{
- Print.out("不等");
- }
结果:
相等
不等
首先String源码中equals重写了父类Obejct的equals 源码:
- public boolean equals(Object anObject) {
- if (this == anObject) {
- return true;
- }
- if (anObject instanceof String) {
- String anotherString = (String)anObject;
- int n = count;
- if (n == anotherString.count) {
- char v1[] = value;
- char v2[] = anotherString.value;
- int i = offset;
- int j = anotherString.offset;
- while (n-- != 0) {
- if (v1[i++] != v2[j++])
- return false;
- }
- return true;
- }
- }
- return false;
- }
做的是值判断 循环判断每一个字符是否相等
所以第一个s1.equals(s3) 结果是true
下面的==还是判断了2个不同的对象 结果为false
*以上测试均通过
结论来自实践和书籍
如果有歧义请指出