黑马程序员技术交流社区

标题: java的内存机制 [打印本页]

作者: harborbest    时间: 2013-4-24 20:23
标题: java的内存机制
本帖最后由 harborbest 于 2013-4-25 08:52 编辑

一个非常简单的问题
String a="1";
String a=new String("1");
问题如下:
两个内存机制不一样是肯定的吧,
String a=new String("1");里面a是引用,a装的是1在内存里面的地址,也就是占用了两块内存
String a="1";里面a装的直接是值,只占用一块内存????
作者: 肖川    时间: 2013-4-24 21:45
不对,第二种写法里a装的也是引用。
这是jdk1.5的新特性,自动装箱拆箱。
其实java开始的时候是采用这种写法:
  1. String a = new String("1");
复制代码
1.5以后可以采用这样写:
  1. Sting a = "1";
复制代码
其实在内存中都是干的一件事。
作者: harborbest    时间: 2013-4-25 08:31
肖川 发表于 2013-4-24 21:45
不对,第二种写法里a装的也是引用。
这是jdk1.5的新特性,自动装箱拆箱。
其实java开始的时候是采用这种写 ...

这是自动装箱的问题吗?请看好题再回答!
作者: 袁梦希    时间: 2013-4-25 08:43
楼主你好:
根据我所了解,
String a="1";  的这种在内存里有个常量池子,池子中装的都是写一些常量,然后拿着你声明的“1”,去对应的常量池中找对应的字符串。
如果有,那么就在内存中开辟了空间并且a指向了这个空间的内存地址。所以这句话有一个对象。
String a=new String("1");
这种方法呢在内存中先开辟了一个空间,然后再开辟一个"1"对象。这个1是定义的1,跟常量池没关系。

版主拎包郑重提示:  {:soso_e113:}   如果楼主问题已经解决那么。在自己发表的帖子下面,点“修改”,
然后把主题的分类标记成“已解决”。就OK了



作者: harborbest    时间: 2013-4-25 08:52
袁梦希 发表于 2013-4-25 08:43
楼主你好:
根据我所了解,
String a="1";  的这种在内存里有个常量池子,池子中装的都是写一些常量,然后 ...

String a=new String("1"); 在内存中生成一个String的对象,同时在内存中生成一个指向刚才创建的String对象的一个引用,也就是a 。自己找资料理解的!
作者: 袁梦希    时间: 2013-4-25 08:54
harborbest 发表于 2013-4-25 08:52
String a=new String("1"); 在内存中生成一个String的对象,同时在内存中生成一个指向刚才创建的String对 ...

其实资料众说纷纭,只要是对的,那么咱们就怎么能理解怎么来。:hug:
作者: 肖川    时间: 2013-4-25 09:02
harborbest 发表于 2013-4-25 08:31
这是自动装箱的问题吗?请看好题再回答!

楼主,劝你认真看毕老师的视频,不要什么都问,解答了还懂不起。




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