您的位置:首页 > 编程语言 > Java开发

JAVA进阶学习-java String类

2015-03-18 09:10 363 查看
注:以下内容来源http://www.w3cschool.cc/java

Java String类

不可变String

String对象是不可变的。查看JDK文档你就会发现,String类每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改的字符串内容,而最初的String对象则丝毫未动。

看下面的代码:

public class Immutable{

public static String upcase(String s){

return s.toUpperCase();

}

public static void main(String args[]){

String q="howdy";

System.out.println(q);

String qq=upcase(q);

System.out.println(qq);

System.out.println(q);

}

}

输出结果:

howdy

HOWDY

howdy

当把q传给upcase()方法时,实际传递的是引用的一个拷贝。其实,每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。

重载“+”与StringBuilder

在java中仅有两个重载操作符为String的“+”与“+=”。

public class Test{

public static void main(String args[]){

String mango="mango";

String s="abc"+mango+"def"+47;

System.out.println(s);

}

}

输出结果:

abcmangodef47

想了解以上代码时如何工作的,可以用JDK自带的工具javap来反编译以上代码,命令:javap -c Test

只显示main部分字节码:

public static void main(java.lang.String[]);

Code:

0: ldc #2 // String mango

2: astore_1

3: new #3 // class java/lang/StringBuilder

6: dup

7: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V

10: ldc #5 // String abc

12: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;

15: aload_1

16: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;

19: ldc #7 // String def

21: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;

24: bipush 47

26: invokevirtual #8 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;

29: invokevirtual #9 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;

32: astore_2

33: getstatic #10 // Field java/lang/System.out:Ljava/io/PrintStream;

36: aload_2

37: invokevirtual #11 // Method java/io/PrintStream.println:(Ljava/lang/String;)V

40: return

在这个例子中,编译器创建了一个StringBuilder对象,用以构造最终的String,并为每个字符串调用一次StringBuilder的append()方法,总计四次。最后调用toString()生成结果,并存为s。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: