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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© harborbest 中级黑马   /  2013-4-24 20:23  /  1363 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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装的直接是值,只占用一块内存????

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
不对,第二种写法里a装的也是引用。
这是jdk1.5的新特性,自动装箱拆箱。
其实java开始的时候是采用这种写法:
  1. String a = new String("1");
复制代码
1.5以后可以采用这样写:
  1. Sting a = "1";
复制代码
其实在内存中都是干的一件事。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
肖川 发表于 2013-4-24 21:45
不对,第二种写法里a装的也是引用。
这是jdk1.5的新特性,自动装箱拆箱。
其实java开始的时候是采用这种写 ...

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

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


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
袁梦希 发表于 2013-4-25 08:43
楼主你好:
根据我所了解,
String a="1";  的这种在内存里有个常量池子,池子中装的都是写一些常量,然后 ...

String a=new String("1"); 在内存中生成一个String的对象,同时在内存中生成一个指向刚才创建的String对象的一个引用,也就是a 。自己找资料理解的!
回复 使用道具 举报
harborbest 发表于 2013-4-25 08:52
String a=new String("1"); 在内存中生成一个String的对象,同时在内存中生成一个指向刚才创建的String对 ...

其实资料众说纷纭,只要是对的,那么咱们就怎么能理解怎么来。:hug:
回复 使用道具 举报
肖川 中级黑马 2013-4-25 09:02:05
7#
harborbest 发表于 2013-4-25 08:31
这是自动装箱的问题吗?请看好题再回答!

楼主,劝你认真看毕老师的视频,不要什么都问,解答了还懂不起。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马