123
返回列表 发新帖
楼主: 臧圩人

[原创] JAVA面试题解惑系列(二)——到底创建了几个String对象?

[复制链接]
论坛徽章:
927
世界杯纪念徽章
日期:2014-07-14 11:31:462014年世界杯参赛球队: 智利
日期:2014-07-04 23:38:162014年世界杯参赛球队: 尼日利亚
日期:2014-07-04 23:38:162014年世界杯参赛球队:墨西哥
日期:2014-07-03 23:45:472014年世界杯参赛球队: 希腊
日期:2014-07-03 23:45:472014年世界杯参赛球队: 荷兰
日期:2014-07-03 23:45:472014年世界杯参赛球队: 阿尔及利亚
日期:2014-07-02 00:13:542014年世界杯参赛球队: 乌拉圭
日期:2014-07-02 00:12:112014年世界杯参赛球队: 哥斯达黎加
日期:2014-07-02 00:12:102014年世界杯参赛球队:巴西
日期:2014-07-01 23:38:18
21#
发表于 2008-7-2 00:21 | 只看该作者
原帖由 it01 于 2008-7-1 22:50 发表



你写文章

我们学习

章少不了你的    

使用道具 举报

回复
论坛徽章:
0
22#
发表于 2008-7-3 11:37 | 只看该作者
问题一:
String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串常量池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。

String d = "ab" + "cd";  
        // 如果d和c指向了同一个对象,则说明d也被加入了字符串池  
        if (d == c) {  
            System.out.println(""ab"+"cd" 创建的对象 "加入了" 字符串池中");
分析:
String d = "ab" + "cd";  编译后等价于 String d = "abcd";(此文有)
d.equals(c)==>true==>说明字符串常量池中有==>没创建新对象==>无所谓加入字符串常量池了吧?

问题二:
StringInternTest类,
      // 使用char数组来初始化a,避免在a被创建之前字符串池中已经存在了值为"abcd"的对象  
    1:String a = new String(new char[] { 'a', 'b', 'c', 'd' });  
      2:String b = a.intern();  
分析:
      第1:行创建了新对象引用赋予a,但没有放入字符串常量池,
      所以在第2:行intern()从池中没查找到.又创建了新对象引用赋予b,
      ==>b==a?false  分析是否正确?

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
23#
 楼主| 发表于 2008-7-3 12:58 | 只看该作者
第一个问题:
我在说明前有这么一段话:
为了便于说明,我们把指向字符串池中已经存在的对象也视为该对象被加入了字符串池:
见原文:http://zangweiren.javaeye.com/blog/209895

第二个问题:
是这么理解的。

使用道具 举报

回复
论坛徽章:
927
世界杯纪念徽章
日期:2014-07-14 11:31:462014年世界杯参赛球队: 智利
日期:2014-07-04 23:38:162014年世界杯参赛球队: 尼日利亚
日期:2014-07-04 23:38:162014年世界杯参赛球队:墨西哥
日期:2014-07-03 23:45:472014年世界杯参赛球队: 希腊
日期:2014-07-03 23:45:472014年世界杯参赛球队: 荷兰
日期:2014-07-03 23:45:472014年世界杯参赛球队: 阿尔及利亚
日期:2014-07-02 00:13:542014年世界杯参赛球队: 乌拉圭
日期:2014-07-02 00:12:112014年世界杯参赛球队: 哥斯达黎加
日期:2014-07-02 00:12:102014年世界杯参赛球队:巴西
日期:2014-07-01 23:38:18
24#
发表于 2008-7-3 14:22 | 只看该作者
原帖由 臧圩人 于 2008-7-3 12:58 发表
第一个问题:
我在说明前有这么一段话:
为了便于说明,我们把指向字符串池中已经存在的对象也视为该对象被加入了字符串池:
见原文:http://zangweiren.javaeye.com/blog/209895

第二个问题:
是这么理解的。

怎么理解??

使用道具 举报

回复
论坛徽章:
0
25#
发表于 2008-7-14 16:41 | 只看该作者
楼主好贴,豁然开朗阿!

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
186
授权会员
日期:2008-07-27 22:25:202014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14版主4段
日期:2015-02-26 02:21:03慢羊羊
日期:2015-03-04 14:51:35
26#
发表于 2008-7-29 12:17 | 只看该作者
收藏了

使用道具 举报

回复
论坛徽章:
56
2010年世界杯参赛球队:瑞士
日期:2010-02-26 11:04:012012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23版主2段
日期:2012-05-31 02:10:00版主2段
日期:2012-05-31 02:10:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07现任管理团队成员
日期:2012-10-18 18:22:36
27#
 楼主| 发表于 2008-7-29 19:42 | 只看该作者
原帖由 xieye 于 2008-7-3 14:22 发表

怎么理解??

参照 dream_forever 的问题二

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表