A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欧阳博 中级黑马   /  2012-3-1 17:08  /  2617 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   String a = "aaa";
   String b = "aaa";
   String c = a;
   String d = new String("asd");
   String e = new String ("asd");
请问上面代码会在内存中创建几个对象?

8 个回复

倒序浏览
6个吧 String a = "aaa";1
   String b = "aaa";1
   String c = a;
   String d = new String("asd");2
   String e = new String ("asd");2
回复 使用道具 举报
八个对象:对对象有引用:a、b、c、d、e、"aaa"、第一个new String("asd"),第二个new String("asd"),一共八个对象。
回复 使用道具 举报
个人认为是4个,如图不知正确与否。
file:///C:/Users/Administrator/Desktop/%E5%9B%BE.jpg
回复 使用道具 举报
本帖最后由 唐兴旺 于 2012-3-1 20:54 编辑

图挂了。。。。再发一次,加一句话对象应该都是在堆内存中吧!

图.jpg (47.84 KB, 下载次数: 49)

图.jpg
回复 使用道具 举报
胡军喜 发表于 2012-3-1 20:22
八个对象:对对象有引用:a、b、c、d、e、"aaa"、第一个new String("asd"),第二个new String("asd"),一共 ...

我也觉得是这样 “aaa”应该不在堆区,应该是在常量区,a,b在编译器优化后都指向一个地址。
回复 使用道具 举报
内存中就两个字符串对象:aaa“、"asd",引用a、b、c同时指向"aaa",d、e同时指向"asd"。
回复 使用道具 举报
应该是三个吧,“aaa”是一个,new String(“asd”)是两个对象,new  String是一个对象,“asd”本身是一个对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马