黑马程序员技术交流社区

标题: String类中"==" 和 equal() 全套字符串比较,,保证你会有打错的 [打印本页]

作者: xiaobei56    时间: 2015-12-16 22:24
标题: String类中"==" 和 equal() 全套字符串比较,,保证你会有打错的
大家看一下 ,,每个输出语句输出什么:
  1. public class StringDemo1 {
  2.         public static void main(String[] args) {
  3.                 String s1=new String("hello");
  4.                 String s2=new String("hello");
  5.                 System.out.println("1:\t"+s1==s2);//false
  6.                 System.out.println("2:\t"+s1.equals(s2));//true
  7.                
  8.                 String s3=new String("hello");
  9.                 String s4="hello";
  10.                 System.out.println("3:\t"+s3==s4);//true
  11.                 System.out.println("4:\t"+s3.equals(s4));
  12.                
  13.                 String s5="hello";
  14.                 String s6="hello";
  15.                 System.out.println("5:\t"+s5==s6);
  16.                 System.out.println("6:\t"+s5.equals(s6));
  17.                
  18.                
  19.                 String s11="hello";
  20.                 String s22="world";
  21.                 String s33="helloworld";
  22.                
  23.                 System.out.println(s33==s11+s22);
  24.                 System.out.println(s33.equals(s11+s22));
  25.                 System.out.println(s33=="hello"+"world");
  26.                 System.out.println(s33.equals("hello"+"world"));
  27.                
  28.         }
  29. }
复制代码







.
.
.
.
.
.
.
.结果:



false
2:        true
false
4:        true
false
6:        true
false
true
true
true


里面还有个疑惑 不知道为啥  ==的输出语句 不会输出其他内容
作者: hmjava520    时间: 2015-12-16 23:03
System.out.println("1:\t"+s1==s2);改成System.out.println("1:\t"+(s1==s2));其他有“==”的地方同理。
作者: xiaobei56    时间: 2015-12-16 23:10
hmjava520 发表于 2015-12-16 23:03
System.out.println("1:\t"+s1==s2);改成System.out.println("1:\t"+(s1==s2));其他有“==”的地方同理。 ...

真的是这样啊 ,,,但是为什么会这样啊!!!!!
作者: xiaobei56    时间: 2015-12-16 23:12
更正啊:::
  1. public class StringDemo1 {
  2.         public static void main(String[] args) {
  3.                 String s1=new String("hello");
  4.                 String s2=new String("hello");
  5.                 System.out.println("1:\t"+(s1==s2));//false
  6.                 System.out.println("2:\t"+s1.equals(s2));//true
  7.                
  8.                 String s3=new String("hello");
  9.                 String s4="hello";
  10.                 System.out.println("3:\t"+(s3==s4));//false
  11.                 System.out.println("4:\t"+s3.equals(s4));
  12.                
  13.                 String s5="hello";
  14.                 String s6="hello";
  15.                 System.out.println("5:\t"+(s5==s6));
  16.                 System.out.println("6:\t"+s5.equals(s6));
  17.                
  18.                
  19.                 String s11="hello";
  20.                 String s22="world";
  21.                 String s33="helloworld";
  22.                
  23.                 System.out.println(s33==s11+s22);
  24.                 System.out.println(s33.equals(s11+s22));
  25.                 System.out.println(s33=="hello"+"world");
  26.                 System.out.println(s33.equals("hello"+"world"));
  27.                
  28.         }
  29. }
复制代码



答案


1:        false
2:        true
3:        false
4:        true
5:        true
6:        true
false
true
true
true

作者: 雨来    时间: 2015-12-16 23:36
  System.out.println("2:\t"+s1.equals(s2));//true    如果不是  String 类重写了  Object类的  equals 方法  也是false
作者: hmjava520    时间: 2015-12-16 23:37
xiaobei56 发表于 2015-12-16 23:10
真的是这样啊 ,,,但是为什么会这样啊!!!!!

"1:\t"+s1==s2相当于("1:\t"+s1)==s2
作者: 744919632    时间: 2015-12-17 09:09
哈希值和内容。
作者: anuo    时间: 2015-12-17 23:01
为什么进入我的反馈的是错误...




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2