码迷,mamicode.com
首页 > 其他好文 > 详细

问题2 String类equals 和 “==” 比较

时间:2015-11-22 17:10:16      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

"==" 比较是否为同一对象,即涉及到内存地址是否相同

“String 中equals” 比较对象中的内容

“Object 中equals” 如果没有重写equals方法,相当于 “=";若要是进行对象内容比较,则必须重写equals方法,因为在现实应用中大都是对对象内容的比较。(可参见问题1)

 

 1         String s1 = "String";
 2         String s2 = "String";
 3         String s3 = new String("String");
 4         String s4 = new String("String");
 5         System.out.println(s1 == s2 ); //结果为true
 6         System.out.println(s1 == s3 ); //结果为false
 7         System.out.println(s1.equals(s2));//结果为true
 8         System.out.println(s1.equals(s3));//结果为true
 9         System.out.println(s3 == s4);//结果为false
10         System.out.println(s3.equals(s4));//结果为true  

 

关于String类,先说说串池,字符串是程序中使用率非常高的类,为了提高效率,串是用“池”来管理的。

String s1="String";这个对象不是在堆中,而是在串池中,当再创建一个变量Sting s2="String";时,会先去池中找,如果有这个字符串存在,就不再新建,而是把s2也指向那个字符串,这样s1和s2就是指向同一个对象了,所以s1==s2是true;

当String s3=new String("String");就不一样了,这是强制在堆空间创建一个对象,这时不指向串池,所以s1==s3是false;但s1.equals(s3);是true;String s4=new String("String");是又创建一个对象在堆空间,s3==s4也是false;但s3.equals(s4);是true。

问题2 String类equals 和 “==” 比较

标签:

原文地址:http://www.cnblogs.com/csnw/p/4986115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!