| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 533 人关注过本帖
标题:关于String的问题
只看楼主 加入收藏
liuya0001
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-8-6
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
关于String的问题
我看的资料中说String对象相当于常量,不能改变。举个例子:String s1=new String("bdj");在后面的操作中还可不可以给s1赋其它值?如果可以为什么?那不就相当于是变量了吗?
搜索更多相关主题的帖子: String 
2010-09-07 19:32
xingjing314
Rank: 2
等 级:论坛游民
帖 子:160
专家分:32
注 册:2007-1-23
收藏
得分:2 
String 不是定义字符串吗?s1可以赋其他值的

2010-09-07 19:50
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
收藏
得分:8 
String 是一个比较特殊的类,说他是常量我也不知道是否合适,但String的确有这样的特点。
从内存分配上来看,String a="123"; 内存开辟了空间存放"123"字符串
执行a=a+"4"; 大家都知道这个时候打印a得到的结果是"1234",但其实内存上并不是在123后面加上4的,而是重新开辟空间存放字符串"1234",前面的"123"字符串依旧存在于内存中(只是没有东西可以引用到他,在将来某个时刻被java虚拟机回收掉。)
同理,String a="1"+"2"+"3"这样的操作,会开辟3个内存空间存放"1"、"12"、"123"字符串,但最终只返回"123"的内存地址给变量。

执行大量的String拼接时的效率是非常低的,就是因为不断的开辟内存空间。

至于String s1=new String("bdj");后面能否再赋值,当然是可以的。原理是他并非像变量一样修改内存的值,而是重新开辟一块内存,创建新的对象。

对比一下变量就更清楚了,int i=0; 开辟内存空间赋值0。i=1;在内存中找到i,将1写入。
2010-09-07 20:12
liuya0001
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-8-6
收藏
得分:0 
回复 3楼 shellingford
谢谢,明白了
2010-09-08 13:43
ablikim
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:47
专家分:104
注 册:2010-8-11
收藏
得分:0 
路过....

妈妈问我:有女朋友嘛?  我:没有!  妈妈:这个可以有! 我:这个真没有!!
2010-09-08 14:53
快速回复:关于String的问题
数据加载中...
 
   



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

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