赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

String和stringBuffer类字符串的区别

发布时间:2007.03.28 01:41     来源:赛迪网技术社区    作者:kl40127

前面看到有人写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的长度一旦变动,就如上面的例子一样,其内部将分配新的内存空间.

(t006)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· JAVA基础应用:日期时间选择控件(代码) (03-27) · 基于java的图片文件格式转换和线性缩放 (03-26)
· JAVA基础:Javascript Cookie管理(程序) (03-26) · JAVA基础应用: 处理Java中的日期问题 (03-26)
· 教程:比较Java EE 5平台和J2EE 1.4平台 (03-26) · JAVA基础应用: 如何实现希尔排序算法 (03-26)
· JAVA应用: 浮点数转化为大写中文金额 (03-26) · 从URL获取文件保存到本地的JAVA代码 (03-26)
· JAVA基础: 连接Access数据库的代码 (03-26) · JAVA基础: 学习struts的一个小例子 (03-26)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 信息化市场百家争鸣 SaaS深陷争议“泥潭”
· 提高管理水平 "两栖"CIO应具备的六大能力
· 国产ITIL运维先行者 四大厂商角力BI市场
· 金融行业GSN专题解决方案 企业网解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统