您的位置:首页 > Web前端

java中String与StringBuffer的==与equals

2013-01-06 14:17 239 查看
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

*以上测试均通过

结论来自实践和书籍

如果有歧义请指出

本文出自 “FlyHome” 博客,请务必保留此出处http://superfly81.blog.51cto.com/6302302/1109556
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: