Java String类为什么是不可变的.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java String类为什么是不可变的

Java String类为什么是不可变的 什么是不可变对象 ? 在Java中 , St ring类是不可变的。那么到底什么是不可变的对象呢 ? 可以这样认为 :如果一 个对象 ,在它创 完成之后 ,不能再改变它的状态 ,那么这个对象就是不可变的。不能改变状态 的意思是 ,不能改变对象内的成员变量 ,包括基本数据类型的值不能改变 ,引用类型的变量不能 指向其他的对象 ,引用类型指向的对象的状态也不能改变。 区分对象和对象的引用 对于Java初学者 , 对于St ring是不可变对象总是存有疑惑。看下面代码 : 1.St ring s =A BCabc; 2.Syst em.o ut .print ln(s = + s ; 3. 4 .s =1234 56; 5.Syst em.o ut .print ln(s = + s ; 打印结果为 : s = A BCabcs = 1234 56 首先创 一个St ring对象s ,然后让s的值为“A BCabc” , 然后又让s的值为“1234 56”。 从打印 结果可以看出 ,s的值确实改变了。那么怎么还说St ring对象是不可变的呢 ? 其实这里存在一个 误区 : s只是一个St ring对象的引用 ,并不是对象本身。对象在内存中是一块内存区 ,成员变量 越多 ,这块内存区占的空间越大。引用只是一个4字节的数据 ,里面存放了它所指向的对象的 地址 ,通过这个地址可以访问对象。 也就是说 ,s只是一个引用 ,它指向了一个具体的对象 ,当s=“1234 56”; 这句代码执行过之后 ,又创 了一个新的对象“1234 56” , 而引用s重新指向了这个心的对象 ,原来的对象“A BCabc”还 在内存中存在 ,并没有改变。内存结构如下图所示 : 更多精彩攻略访问 1 Java和C++的一个不同点是 , 在Java中不可能直接操作对象本身 ,所有的对象都由一个引 用指向 ,必须通过这个引用才能访问对象本身 ,包括获取成员变量的值 ,改变对象的成员变量 , 调用对象的方法等。而在C++中存在引用 ,对象和指针三个东西 ,这三个东西都可以访问对象。 其实 ,Java中的引用和C++中的指针在概念上是相似的 ,他们都是存放的对象在内存中的地址值 ,只是在Java中 ,引用丧失了部分灵活性 ,比如Java中的引用不能像C++中的指针那样进行加减 运算。 为什么St ring对象是不可变的 ? 要理解St ring的不可变性 ,首先看一下St ring类中都有哪些成员变量。 在J DK1.6中 ,St ring的 成员变量有以下几个 : 1.publicf inalclassSt ring 2.implement sjava.io .Serializable, Co mparable, CharSequence 3.{ 4 ./** T he value is used f o r charact er st o rage. */ 5.privat ef inalcharvalue[]; 6. 7./** T he of f set is t he f irst index of t he st o rage t hat is used. */ 8.privat ef inalint of f set ; 9. 10./** T he co unt is t he number of charact ers in t he St ring. */ 11.privat ef inalint co unt ; 更多精彩攻略访问 2 12. 13./** Cache t he hash code f o r t he st ring */ 14 .privat eint hash;// Def ault t o 0 在J DK1.7中 ,St ring类做了一

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档