今天听了一节培训机构的免费课,还是没白去,弄清楚了一个问题(呵呵)先看一下下面的代码输出什么。
String s1 = new String("ss");
String s2 = new String("ss");
String s3 = "ss";
String s4 = "ss";
System.out.println(s1 == s2); //flase
System.out.println(s3 == s4); //true
System.out.println(s1 == s3); //false
System.out.println(s1.equals(s2)); //true
System.out.println(s3.equals(s4)); //true
System.out.println(s1.equals(s3)); //true
StringBuffer sbuf1 = new StringBuffer("ss");
StringBuffer sbuf2 = new StringBuffer("ss");
System.out.println(sbuf1 == sbuf2); //false
System.out.println(sbuf1.equals(sbuf2)); //false
输出为
false
true
false
true
true
true
false
false
是不是有很多地方让人很迷惑,第一个地方就是
String s3="ss";
String s4="ss";
为什么System.out.println(s3==s4); //true
这是因为这样新建字符串对象,其实是在内存中新建了一个对象,两个引用分别指向这个对象
第二个地方就是
StringBuffer sbuf1=new StringBuffer("ss");
StringBuffer sbuf2=new StringBuffer("ss");
为什么System.out.println(sbuf1.equals(sbuf2)); //false
这是因为StringBuffer中没有重写Object中的equals方法,所以得到false,要使能够比较String 对象,就必须实现Comparable接口或重写equals方法。
String s1 = new String("ss");
String s2 = new String("ss");
String s3 = "ss";
String s4 = "ss";
System.out.println(s1 == s2); //flase
System.out.println(s3 == s4); //true
System.out.println(s1 == s3); //false
System.out.println(s1.equals(s2)); //true
System.out.println(s3.equals(s4)); //true
System.out.println(s1.equals(s3)); //true
StringBuffer sbuf1 = new StringBuffer("ss");
StringBuffer sbuf2 = new StringBuffer("ss");
System.out.println(sbuf1 == sbuf2); //false
System.out.println(sbuf1.equals(sbuf2)); //false
输出为
false
true
false
true
true
true
false
false
是不是有很多地方让人很迷惑,第一个地方就是
String s3="ss";
String s4="ss";
为什么System.out.println(s3==s4); //true
这是因为这样新建字符串对象,其实是在内存中新建了一个对象,两个引用分别指向这个对象
第二个地方就是
StringBuffer sbuf1=new StringBuffer("ss");
StringBuffer sbuf2=new StringBuffer("ss");
为什么System.out.println(sbuf1.equals(sbuf2)); //false
这是因为StringBuffer中没有重写Object中的equals方法,所以得到false,要使能够比较String 对象,就必须实现Comparable接口或重写equals方法。