| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 1379 人关注过本帖
标题:String是类 为什么不需要new对象
只看楼主 加入收藏
不落夕阳
Rank: 2
等 级:论坛游民
帖 子:64
专家分:30
注 册:2016-10-13
结帖率:69.57%
  已结贴   问题点数:2  回复次数:5   
String是类 为什么不需要new对象
String?
2018-07-17 16:53
CharlesClear
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2018-7-17
  得分:1 
new的时候会在堆上创建一个新对象,不new的话只是定义一个引用指向堆里面已经存在的对象。
string 可以new  也可以不new。
2018-07-17 17:38
wlrjgzs
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:26
帖 子:198
专家分:1429
注 册:2017-4-10
  得分:1 
很简单,String是一个内置对象,java已经帮我们new了。
2018-07-18 09:33
不落夕阳
Rank: 2
等 级:论坛游民
帖 子:64
专家分:30
注 册:2016-10-13
  得分:0 
回复 2楼 CharlesClear
就是说堆里面已经存放一些字符串对象,如果String q=“b”;当堆中已经存在“b”对象,就直接把b的地址给q,没有b的话就new对吧,是这个意思吗
2018-07-19 19:51
yjh461941298
Rank: 2
等 级:新手上路
威 望:3
帖 子:2
专家分:2
注 册:2018-7-21
  得分:1 
回复 4楼 不落夕阳
不是你说的那样!
首先内存分四大块:1. 栈区2. 堆区3. 数据区4. 代码区
如果写: String str = "123";那么 “123”会保存在 数据区, 数据区一般存一些常量,这样写java会把“123”认为是常量 放入数据区。
如果写: String str = new String("123");那么这时的 “123”是放在堆中的
所以:

当写 ->   String str1 = "123"; String str2 = "123";  那么: str1 == str2 的结果是 true;这是因为,str1 的赋值过程中 会将“123”认为是一个常量,放入到数据区, 当str2赋值时, 在数据区找到了有一个“123”存在,这时就将这个“123”的引用给了 str2,也就是说: str1 和 str2 有相同引用。这样做的目的是为了 节省内存,
当写 -> String str1 == "123"; String str2 = new String("123");那么 str1 == str2 的结果是 false;
2018-07-21 00:52
不落夕阳
Rank: 2
等 级:论坛游民
帖 子:64
专家分:30
注 册:2016-10-13
  得分:0 
回复 5楼 yjh461941298
哦原来是这样的啊,那么Integer也是同理咯
2018-07-25 10:10







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026416 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved