· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [访谈] 网银安全系列访谈之:惊心动魄网银故事
· [热点专题] 网银安全系列 3G上网卡巡礼
· [订阅IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 跨站脚本十二问 四步防范Conficker
· [热点] Windows 7 RC版公开下载 憾缺中文版

String类和stringBuffer类下字符串的区别

发布时间:2007.11.05 04:42     来源:赛迪网技术社区    作者:baocl

看到有人写String和stringBudffer的区别是前者是不能改写的,后者是可以改写的
我觉得说String的字符串不能改变话是不错,但是例子要举好

看看下面这个简单的例子:
首先,
public class xx {
public static void main(String[] args) {
String s1 = "You are hired!";
String s2 = "You are hired!";
if (s1==s2) {
System.out.println("一个内存空间");
} else {
System.out.println("不是一个内存空间");
}
}
}
打印的结果是:一个内存空间
这里==的意义是两个操作数是否指向同一个对象
可见s2在不用new创建的情况下会自动检索到具有相同内容的内存空间中共享,那么既然s1和s2共享了同一个对象
再看下面的代码

public class xx {
public static void main(String[] args) { String s1 = "You are hired!";
String s2 = "You are hired!";
s1 = s1.replace('h','f');
System.out.println(s1);
if (s1==s2) {
System.out.println("一个内存空间");
} else {
System.out.println("不是一个内存空间");
}
}
}
代码结果是
You are fired!
不是一个内存空间
可见,String中s1的内容虽然被改写,但是已经不在是原来第一次分配到的那个内存空间,也就是String类的内容能被改变,但一旦改变系统将为其分配新的内存
说到与stringBuffer的区别,从根本上来说应该是
stringBuffer在做字符长度变动的时候将继续使用原来的内存空间,不新分配.
而String的长度一旦变动,就如上面的例子一样,其内部将分配新的内存空间


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Java中将数据由UTF8转换成GB2312格式 (11-02) · 成学人生:java开发真的需要那么复杂吗? (11-02)
· 新手入门:Windows下JSP开发环境的配置 (11-02) · Eclipse插件的外挂安装方法 (11-02)
· Sun公司补上了Java几个严重安全漏洞 (11-02) · 分享Java语言中内存管理的几个小技巧 (11-02)
· 探讨:在Java程序中如何实现回调例程 (11-02) · Java语言对象池技术的原理及其实现解析 (11-02)
· JAVA高级--Java中异常机制的深入研究 (11-02) · 一个基于Java Socket实现文件传输示例 (11-02)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
2009第七届中国电脑商年会直播
·创业投资系列访谈:产业..
·特别策划:视频网站系列..
·专题:网游虚拟货币新规..
专题:6月上市手机新品回顾及7月新机展望
·2009年中国电信业信息化..
·专题:把iPhone 3GS“解..
·WAPI重启国际标准进程 ..
专题:09年中盘点-联想春季打印机新品回顾
·InfoComm 2009 视听与集..
·网游背后的故事 网游服..
·[专题]联想ThinkPad T40..
BizSpark:微软为技术创业企业点燃火花
·社区活动:我的IT求知生..
·访谈:内网安全2009系列..
·安全访谈:网银安全之Sa..