String与StringBuffer的区别,“==”与.equals()方法的使用
一、“==”与.equals()方法的使用。
1、String类。
<1> 、String类“==”的使用。
String a = "a";
String b=“a”;
由于Sting是final类,并且a、b是对象不是基本类型。String对象的值不能改变,也就是值相同,对象也相同。所以a和b是同一个对象,并且“==”判断的是对象的地址,所以a==b 为true。
一个例子证明:
package Test;
/**
*
* @author Xiao
*调用构造器创建多个对象,他们的String类型属性s都指向同一个对象。
*/
public class E01_31 {
private String s;
public E01_31() {
s= "Initial Value";
}
public static void main(String[] args) {
E01_31 s1 = new E01_31();
E01_31 s2 = new E01_31();
if(s1.s==s2.s){
//判断两个对象的s地址是否相同。
System.out.println("111");
}
}
}
结果输出:111;
<2>、String类.equals()方法的使用。
String a = "a";
String b = ''b''
a.equals()==b.equals();结果为false。因为.equals()方法判断的是对象的值是否相等。
2、StringBuffer类
<1>、StringBuffer类"==”的使用。
StringBuffer a=new StringBuffer("ss");StringBuffer b=new StringBuffer("ss");a==b结果为false,因为a,b不是同一个对象,并且"==”判断的是对象的地址是否相等。<2>StringBuffer类".equals()”的使用。
StringBuffer a=new StringBuffer("ss");
StringBuffer b=new StringBuffer("ss"); boolean b1 = a.equals(b); System.out.println(b1);
为什么?StringBuffer 类中没有重写定义equals 方法,这里的equals 方法是 调用的Object 中的方法,而object类的equals方法是比较地址的,而不是比较值的所以a.equals(b)返回的是false;//输出结果为false。
既然StringBuffer,“==”和“equals()”方法都是比较地址的,那么如何去比较StringBuffer对象的值呢?方法:就是通过调用StringBuffer的toString方法,把StringBuffer对象的值,转为String对象,然后再调用String对象的equals()方法进行比较。(比较对象的值)StringBuffer a=new StringBuffer("ss"); StringBuffer b=new StringBuffer("ss");
boolean b2 =a.toString().equals(b.toString()); System.out.println(b2);
//输出结果为true。