下载此文档

初探Java字符串-Java开发Java经验技巧.doc


文档分类:IT计算机 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8 下载此文档
文档列表 文档介绍
初探Java字符串-Java开发Java经验技巧.doc:..初探Java字符串-编程开发技术初探Java字符串廉文出处:蔡晓建String印象String是java屮的无处不在的类,使用也很简单。初学java,就已经有字符串是不可变的盖棺定论,解释通常是:它是final的。不过,String是有字面量这一说法的,这是其他类型所没有的特性(除原牛类型)。另外,九阳中也冇字符串常量池这个说法,用來存储字符串字面量,不是在堆上,而是在方法区里边存在的。字面量和常量池初探字符串对象内部是用字符数组存储的,那么看下面的例子:Stringm二"hello,world";Stringn二"hello,world";Stringu=newString(m);Stringv=newString("hello,world");这些语旬会发生什么事情?大概是这样的:,并在常量池分配一个山这个char数组组成的字符串,然后由m去引用这个字符串。,所以和n引用的是同一个对象。,但内部的字符数组引用着m内部的字符数组。,但内部的字符数组引用常量池里边的字符串内部的字符数组,意思是和u是同样的字符数组。如杲我们使用一个图来表示的话,情况就大概是这样的(使用虚线只是表示两者其实没什么特别的关系):结论就是,m和n是同一个对象,但m,u,v都是不同的对象,但都使用了同样的字符数组,并且用equal判断的话也会返回true。我们可以使用反射修改字符数组来验证一下效果,可以试试下而的测试代码:©Testpublicvoidtest1()throwsException{Stringm二〃hello,world";Stringn二"hello,world";Stringu=newString(m);Stringv=newString(/zhello,world'O;().getDeclaredField(〃value〃);(true);char[]cs=(char[])(m);cs[0]='H';Stringp二〃Hello,world";(p,m);Assert・assertEquals(p,n);(p,u);(p,v);}从上面的例子可以看到,经常说的字符串是不可变的,其实和其他的final类还是没什么区别,述是引用不可变的意思。虽然String类不开放value,但同样是可以通过反射进行修改,只是通常没人这么做而已。即使是涉及”修改”的方法,都是通过产生一个新的字符串对象來实现的,例如replace、toLower>concat等。这样做的好处就是让字符串是一个状态不可变类,在多线程操作时没有后顾之忧。当然,在字符串修改的时候,会产生一个新的对彖,如果执行很频繁,就会导致大量对彖的创建,性能问题也就随之而来了。为了应付这个问题,通常我们会采用StringBuffer或StringBu订der类来处理。另外,字符串常量通常是在编译的时候就确定好的,定义在类的方

初探Java字符串-Java开发Java经验技巧 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人pppccc8
  • 文件大小469 KB
  • 时间2019-01-20
最近更新