黑马程序员技术交流社区

标题: 请问在内存中创建了几个对象 [打印本页]

作者: 欧阳博    时间: 2012-3-1 17:08
标题: 请问在内存中创建了几个对象
   String a = "aaa";
   String b = "aaa";
   String c = a;
   String d = new String("asd");
   String e = new String ("asd");
请问上面代码会在内存中创建几个对象?
作者: 泮和顺    时间: 2012-3-1 17:20
6个吧 String a = "aaa";1
   String b = "aaa";1
   String c = a;
   String d = new String("asd");2
   String e = new String ("asd");2
作者: 胡军喜    时间: 2012-3-1 20:22
八个对象:对对象有引用:a、b、c、d、e、"aaa"、第一个new String("asd"),第二个new String("asd"),一共八个对象。
作者: 唐兴旺    时间: 2012-3-1 20:50
个人认为是4个,如图不知正确与否。
file:///C:/Users/Administrator/Desktop/%E5%9B%BE.jpg
作者: 唐兴旺    时间: 2012-3-1 20:52
本帖最后由 唐兴旺 于 2012-3-1 20:54 编辑

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

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

图.jpg

作者: 张锐    时间: 2012-3-1 20:57
胡军喜 发表于 2012-3-1 20:22
八个对象:对对象有引用:a、b、c、d、e、"aaa"、第一个new String("asd"),第二个new String("asd"),一共 ...

我也觉得是这样 “aaa”应该不在堆区,应该是在常量区,a,b在编译器优化后都指向一个地址。
作者: 冯兵兵    时间: 2012-3-1 21:03
内存中就两个字符串对象:aaa“、"asd",引用a、b、c同时指向"aaa",d、e同时指向"asd"。
作者: xieguanxiong    时间: 2012-3-3 10:36
应该是三个吧,“aaa”是一个,new String(“asd”)是两个对象,new  String是一个对象,“asd”本身是一个对象。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2