问题2 String类equals 和 “==” 比较
2015-11-22 16:38
274 查看
"==" 比较是否为同一对象,即涉及到内存地址是否相同
“String 中equals” 比较对象中的内容
“Object 中equals” 如果没有重写equals方法,相当于 “=";若要是进行对象内容比较,则必须重写equals方法,因为在现实应用中大都是对对象内容的比较。(可参见问题1)
关于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。
“String 中equals” 比较对象中的内容
“Object 中equals” 如果没有重写equals方法,相当于 “=";若要是进行对象内容比较,则必须重写equals方法,因为在现实应用中大都是对对象内容的比较。(可参见问题1)
String s1 = "String"; String s2 = "String"; String s3 = new String("String"); String s4 = new String("String"); System.out.println(s1 == s2 ); //结果为true System.out.println(s1 == s3 ); //结果为false System.out.println(s1.equals(s2));//结果为true System.out.println(s1.equals(s3));//结果为true System.out.println(s3 == s4);//结果为false 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。
相关文章推荐
- 信息安全系统设计基础第十一周学习总结
- POJ3580 SuperMemo(Splay的区间操作)
- 哈夫曼树及解码
- php中一些函数的用法
- 页面之间的普通传值和反向传值
- Extjs5 常用layout
- 【poj2575】Jolly Jumpers
- Maximum Depth of Binary Tree (Leet Code)
- webview返回按钮 iOS
- 在ubuntu下安装python imagine library
- 网页元素位置、鼠标事件位置信息小结
- 如何使用富文本编辑器xheditor
- HDU1029-Ignatius and the Princess IV
- Android应用内语言切换实现
- 自定义控件SettingItemView
- zzulioj 1783: 简单的求和 (筛选求和) 求和预处理 好题
- SQLite使用事务更新—by command
- 《你的灯亮着吗?:发现问题的真正所在》读书笔记
- HTML表格边框的设置小技巧
- CALayer 为什么选择 cg 开头 而 不选择 UI 开头