JAVA进阶学习-java String类
来源:互联网 发布:三菱plc模拟量编程 编辑:程序博客网 时间:2024/05/16 23:02
注:以下内容来源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。
- JAVA进阶学习-java String类
- Java进阶01 String类
- Java进阶01 String类
- Java进阶01 String类
- Java进阶01 String类
- Java进阶01 String类
- 【Java 进阶篇】【第一课】String类
- 学习java String类
- JAVA String类学习
- Java学习-String类
- java学习--String类
- java-学习-string类
- Java学习 String 类
- JAVA进阶学习-java对象和类
- java学习进阶
- Java进阶学习路线图
- java 学习进阶
- java进阶学习笔记
- Office 2016与Skype for Business预览版亮相
- 第一周上机实践_长方柱
- 第二周项目2-长方柱
- .net学习第十四天
- 2015-第二周-旱冰场造价
- JAVA进阶学习-java String类
- Mycat 水平分表,垂直分表实践(2)
- Unity UGUI——Image(基本属性)
- 第二周 项目3-时间类(2)
- .net学习第十五天
- ReportNG 手把手教你弄测试报告
- 第一周项目二
- 121.Best Time to Buy and Sell Stock
- android-测试so动态库(九)