首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

细看java.lang.String种

2012-12-24 
细看java.lang.String类? 一)不可变的String:??????? 首先String这个类是final的,不可被继承。String对象是

细看java.lang.String类

? 一)不可变的String:

??????? 首先String这个类是final的,不可被继承。String对象是不可变的,查看一下JDK文档是乎每个方法看起来都会修改String对象的值,实际上都是创建了一个全新的String对象,用来包含修改后的字符串内容。而最初的String对象则丝毫未动。

?????

public class TestString{public static String upcase(String s){ return s.toUpperCase(); }  public static void main(String [] args){ String str = "hello";     System.out.println(str); String upcaseStr = upcase(str); System.out.println(upcaseStr); System.out.println(str);   }}

?

输出:hello HELLO hello????????

??????? 由此可见,str的内容并没有改变。当把str传递给upcase()方法时,实际传递的是一个引用。每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。

?

?二)?“+” 和“StringBuilder”

?????? String对象是不可变的,你可以给一个String对象添加任意多的别名,因为String对象具有只读特性,所以指向它的任何引用都不可能改变它的值。正是因为不可变性给String带来了性能上的问题。当我们执行如下的这句代码的时候

String s = "today"+"is"+"women's"+"day";? java虚拟机帮我们执行了一些操作,它会默认的给我们创建一个StringBuilder对象。来该对象来构建最终的String. 最后调用StringBuilder的toString()方法生成结果。然后将引用交给S。

热点排行