Java中String str2 = "abc"与String str3 = new String("abc")的过程是不同的。
我们来看下面一段代码:

str1 == str2将返回true,为什么呢?Java中的基本数据类型使用"=="可以判断操作数是否相等,对于对象则判断这两个对象的内存地址是否相同。Java虚拟机为了提高字符串应用效率,提供了字符串池来保存字符串常量,str1创建字符串常量"abc"时,虚拟机会先检测字符串池中是否包含该字符串,如果不包含则创建该字符串常量,并将其保存在字符串池中,然后再返回。str2也赋值为"abc",这时字符串池中已存在该字符串,不再创建,直接返回该字符串。也就是str1、str2引用同一个字符串,地址是相同的,因此str1 == str2成立。
但是使用new关键字创建的字符串会新开辟内存看空间,因此str2 == str3不成立。
——以上内容摘自《Java开发实战1200例(第卷)》

 

posted on 2012-06-05 21:43 小鼠标 阅读(2581) 评论(3)  编辑 收藏 引用 所属分类: Java笔记

FeedBack:
# re: String str2 = "abc"与String str3 = new String("abc")的区别
2012-06-06 21:09 | 小鼠标
@tb
欢迎交流学习经验!  回复  更多评论
  
# re: String str2 = "abc"与String str3 = new String("abc")的区别[未登录]
2012-06-20 16:39 | 贼寇在何方
完全不明白Java不支持运算符重载的同时,还不把字符串做成内置类型。
如此,Java的String只能作为一个普通的类,等号运算符也只能够做最浅的引用判等,非得用equals方法才是,唉...  回复  更多评论
  
# re: String str2 = "abc"与String str3 = new String("abc")的区别
2012-06-21 22:50 | 小鼠标
这可能是为了保持java的面向对象特性吧,java中不纯净的东西也就是那百分之几的基本类型了。@贼寇在何方
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

随笔分类(111)

随笔档案(127)

friends

最新评论

  • 1. re: 线段树
  • 是这个样子的,所以在OJ有时候“卡住”了也不要太灰心,没准真的不是自己的原因呢。
    加油,祝你好运啦!
  • --小鼠标
  • 2. re: 线段树
  • 对于编程竞赛来说,Java所需时间一般为C/C++的两倍。合理的竞赛给Java的时间限制是给C/C++的两倍。
  • --伤心的笔
  • 3. re: poj1273--网络流
  • 过来看看你。
  • --achiberx
  • 4. re: (转)ubuntu11.10无法启动无线网络的解决方法
  • 膜拜大神。。查了一个下午资料终于在这里解决了问题。。神牛说的区域赛难道是ACM区域赛。。?
  • --Hang
  • 5. re: 快速排序、线性时间选择
  • 博主,谢谢你的文章。你的方法可以很好的处理分区基准在数组中重复的情况,书上的方法遇到这种输入会堆栈溢出。书上给出了解释但给的方法貌似不简洁。
  • --lsxqw2004

阅读排行榜