- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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类做了一
您可能关注的文档
- 第7章 诊断试验.ppt
- 全球最全ETF综述与汇总.docx
- 16进制之间转换.pdf
- 136个社工网站.pdf
- 第十二章(会话跟踪下).ppt
- 41050;44070;中文规格书,Datasheet资料.pdf
- 4阶矩阵的逆 and 矩阵相乘.pdf
- 2016全球能源互联网大会材料6-4.pdf
- Android数据存储及IO.pdf
- C++ 数据类型转换技巧.pdf
- 第十一章 电流和电路专题特训二 实物图与电路图的互画 教学设计 2024-2025学年鲁科版物理九年级上册.docx
- 人教版七年级上册信息技术6.3加工音频素材 教学设计.docx
- 5.1自然地理环境的整体性 说课教案 (1).docx
- 4.1 夯实法治基础 教学设计-2023-2024学年统编版九年级道德与法治上册.docx
- 3.1 光的色彩 颜色 电子教案 2023-2024学年苏科版为了八年级上学期.docx
- 小学体育与健康 四年级下册健康教育 教案.docx
- 2024-2025学年初中数学九年级下册北京课改版(2024)教学设计合集.docx
- 2024-2025学年初中科学七年级下册浙教版(2024)教学设计合集.docx
- 2024-2025学年小学信息技术(信息科技)六年级下册浙摄影版(2013)教学设计合集.docx
- 2024-2025学年小学美术二年级下册人美版(常锐伦、欧京海)教学设计合集.docx
文档评论(0)