网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
可签
7
级以上的吧
50
个
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月12日
漏签
0
天
java吧
关注:
1,243,368
贴子:
12,718,613
看贴
图片
吧主推荐
视频
游戏
1
2
下一页
尾页
39
回复贴,共
2
页
,跳到
页
确定
<返回java吧
>0< 加载中...
有个问题
只看楼主
收藏
回复
以天下奇
水
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
java实例化对象的时候,对于String来说,如果我给了有参数的构造函数,那么他是先开辟对象的堆内存,给String上一个null,给String分配一个不被指向的堆内存,然后把这个不被指向的堆内存mov到null的位置。还是直接开辟对象的堆内存的时候不开辟一个不被栈内存指向的堆内存空间,而是直接把构造函数的参数mov到对象的String的堆内存中?
送TA礼物
1楼
2016-01-21 18:01
回复
以天下奇
水
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
我是新手,说错勿喷
2楼
2016-01-21 18:02
回复
收起回复
米聆科技
java
小程序出售价格2025年容器价格容器报价点击获取报价信息
2025-02-12 12:21
广告
立即查看
以天下奇
水
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
给String分配一个不被指向的堆内存,这个说的是构造函数的参数的Sting
3楼
2016-01-21 18:03
回复
收起回复
以天下奇
水
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
有人吗
4楼
2016-01-21 18:13
回复
收起回复
以天下奇
水
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
求大神解惑
5楼
2016-01-21 18:13
回复
收起回复
里昂与亨利
淼淼沝
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
好绕啊,看不懂
IP属地:广东
来自
Android客户端
6楼
2016-01-21 18:27
回复
收起回复
暴躁的小正太丶
淼淼淼沝
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
看不dong
来自
Android客户端
7楼
2016-01-21 18:27
回复
收起回复
人在_托没了
淼淼淼沝
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
楼主c来的么
来自
Android客户端
8楼
2016-01-21 18:46
回复
收起回复
秋天枫叶红了
淼淼淼
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
对象都是先在栈中开辟空间,堆中然后new出来一个,堆中放的都是实体,你说的null是默认初始化,默认初始化完成之后是显示初始化,如果有构造代码块则进行构造代码块初始化,最后是构造函数初始化,全部初始化完成,把栈中的引用指向堆中的地址。
另外你问的字符串,字符串不单单是堆和栈,因为它有字符串池,如果是new的话,对于字符串来说会有2个对象产生,堆中一个。池中一个,不过最后返回的还是堆中的,只不过堆中的会指向池中的。
好绕
IP属地:山东
9楼
2016-01-21 18:47
回复(4)
收起回复
卑贱不过人心
淼淼沝
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
字符串和一般对象有点区别,例如String str=new String("nihao"),它是先查看字符串池中是否有"nihao"这个对象,如果有,引用会直接指向这个对象,如果没有,会创建该点对象放入池中,然后指向该对象
来自
Android客户端
10楼
2016-01-21 19:43
回复(1)
收起回复
以天下奇
水
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
然后有一个问题就是,new的对象都是存放在堆中的,然后我"123"==new String("123");却会给我返回一个0,new String("123")的123是存放在堆中的,但是如果new String("123")的123和之前那个没有new的123是在一个内存空间中的话,那么应该会返回一个1给我,所以没有new的字符串是不是没有存放在堆中呢。因为我new的时候,String的构造方法里面传的字符串123可能和前那个没有new的123是共享的,也就是说是一个空间中的123,然后因为我之前那个比较的代码是匿名的String对象,所以他直接开辟了一个空间把那个没有new的123复制了一份到开辟的空间,然后new String开辟的空间在堆中。我推测的应该没错吧。
@卑贱不过人心
11楼
2016-01-22 02:04
回复(9)
收起回复
以天下奇
水
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
然后如果new出来的String是存放在堆内存中的,如果是直接“赋值的话”应该是开辟字符串常量池中的内存,所以导致了new出来的字符串!=直接“”开辟的字符串就算表名上给的值一样,但是因为=是比较基本类型的,如果是引用类型的话=会比较他们的指向的内存是否一致。不知道我说的对不
12楼
2016-01-22 02:18
回复(1)
收起回复
空即是色1314
淼淼淼
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
……擦。。mov,mov什么mov啊,别整个汇编的出来………告诉你吧,是检查字符串池里有没有相同参数的字符串,如果有,就不在字符串池里造一个对象,如果没有,就先在常量池中造一个对象,最后不管字符串池里有没有都要去堆中创建一个字符串对象。。
IP属地:广东
来自
Android客户端
14楼
2016-01-22 02:34
回复(5)
收起回复
以天下奇
水
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
第一种情况:有人说字符串本身还是在堆中,但是字符池也会有一个一样的值,如果是这样的话,那么new String("值")首先""在字符池开辟一个空间,然后把这个值再拷贝一份到new开辟出来在堆中的空间里。那么他会开辟2个空间。但是如果直接""赋值也会在字符池中开辟空间并且对内存中也有这个值得话,那么也是2个空间,而且字符池不像堆内存一旦不被引用的时候就会释放空间。那么如果按照我上面所说的话,new String过程中所占用的内存和""赋值过程中占用的内存都是2个空间。**************上面是我一个推测,第二种情况:还有一个就是当new String("值")开辟的时候,首先 "值" 会在堆内存中开辟一个空间,然后把之前""双引号开辟的"值"拷贝到new开辟的空间中,然后释放"值"开辟的空间,再拷贝一份到字符池中去,这样过程中会花费3个空间,释放一个;直接"值"赋值的话,会在堆内存开辟一个空间,然后把空间拷贝到字符池中去,然后""开辟的堆内存空间不被释放,整个过程会花费2个内存空间。上面的猜测是建立在String不管是""还是new开辟空间的时候都会在堆内存和字符池中有相同的值,但是如果堆内存和字符池中有相同的值得话那么String对象名不管是""还是new都会指向堆内存中的那个值,而new开辟的空间=赋值给String对象,那么用=号去比较用""双引号赋值的那个String对象应该会返回一个0,说明""赋值之后堆内存中并没有该值或一定不指向堆内存,因为如果有的话,返回的一定是1,并且第二个String必须要指向在堆内存中的那个new出来的相同内容的堆内存。可能有人会说,new出来的值再堆内存的时候,如果""赋值的时候虽然内容相同,但是他其实指向的堆内存不是new出来的堆内存,如果不指向一个堆内存的话说明java共享的时候,不是在堆内存中查找的,而是在字符池中查找相同的String值,但是这样的话,我把""写在new的前面,也就是顺序换一下,先""赋值一个String对象,然后new一个对象,那么他如果是在字符池中查找相同的值得话,那么new String("123")的时候,他首先会在字符池中查找有没有相同的值,如果有的话,java可以直接把字符池中相同的值直接拷贝到new开辟的对内存,这样的话如果在new之前有""赋值的话,那么后面new构造方法中传递同一个之前""被赋值过的值得话,他只会开辟两个空间,而不会再堆内存中多开辟一个空间?,************************根据上面我想问,不管是”“还是new创建String对象,"a"在字符池中开辟空间放入一个值a,然后还会在堆内存中开辟一个空间存入一个值a。new实例化对象如果在字符池中也有一个值a,并且在堆内存中有一个不指向"a"的堆内存的堆内存,所以new String("a")=="a"返回一个0因为他们指向的不是一个堆内存,但是因为java的共享模式会把要开辟存入的相同的值的两个对象指向一个开辟的堆空间中,那么java是不是根据字符池中的内存来查找相同的值,然后引用传递(是在""也会在堆内存中有一个值得情况下我猜测的上面的假说,如果""不会在堆内存中也有一个空间的话,那么当我没说上面)。如果""在堆内存中也有一个空间的话,那么如果在""之后new的值为什么不指向""开辟的时候在堆内存中的空间,因为共享的话堆内存也应该共享啊。**********如果java的共享机制是在堆内存中查找一样的值得话,那么""应该不是在堆内存中有值,而只是String对象名指向字符池中的值,否则如果"'在的对象名在堆内存中也有值得话,那么如果共享机制是在堆内存中查找相同的值,那么new String("123")==”123“应该会返回一个10
15楼
2016-01-22 03:05
回复(3)
收起回复
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧热议榜
1
山寨版哪吒2诈骗电影辣瞎眼
2205270
2
贝林厄姆绝杀皇马拿下曼城
1932241
3
哪吒2在岛国票房安静得可怕
1377740
4
遐蝶立绘放出大伙如何评价?
1328859
5
首届电竞奥运会2027年举办
1220076
6
Tian凭啥代表LPL上沙特杯封面
864125
7
怎么看待WTT改革措施
616200
8
男主被这么对待是犯了天条吗?
531185
9
东契奇湖人首秀表现如何
408276
10
EDG3:0轻松击败LNG
377958
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示