字符串拼接原理

来源:互联网 发布:上海趣推网络 编辑:程序博客网 时间:2024/06/01 23:35
public class hello{public static void main(String args[]){String a = "A";String b = "B";String c = a+b;System.out.println(c);}}


这一块代码到底发生了什么呢,今天看了下字节码理解了这一过程的原理,


先上图吧~



使用javap功能可以查看编译后的class文件的一些信息,具体的其他功能可以从命令javap -help 中了解.
这里用上了-c选项 对class文件进行反汇编成字节码


从字节码中可以看出,先是实例化了一个字符串A和一个字符串B,当程序执行到
String c = a+b;
这一行的时候,可以看到这时候实例化了一个StringBuilder对象,然后执行了两次append方法,将变量a和变量b添加到对象中后执行了toString赋值给变量c
最后就是输出了变量c的内容


可以发现字符串"A"+字符串"B"背后的原理其实就是new StringBuilder().append("A").append("B").toString();


今天发现直接拼接字符串和两个String变量拼接是不一样的

看下面的代码生成了几个对象


public class StringTest{public static void main(String args[]){String C = "A"+"B";String D = new String(C);}}


可以先思考这里生成了几个对象,

思考过后来从字节码中看看到底发生了什么



如图,答案是生成了两个对象,生命变量C的时候直接得到一个"AB"对象,而不是“A”对象、"B"对象以及"AB"对象


原创粉丝点击