符串拼接,什么时候用StringBuilder

简介: 符串拼接,什么时候用StringBuilder

最近在突然想到了String字符串拼接问题,于是做了一个demo测试了一下,到底String类型的字符串在拼接的时候,哪种情况下会走会走StringBulider进行字符串拼接,而哪种情况编译器会对代码进行优化?话不多说,先看demo

 

# 问题

 

案例1

 

 

可以发现,str == str2的结果为false,那么我们在看看下一个例子。

 

案例2

 

这时候,两个字符串对比的结果为true。

 

# 探究问题

 

这时候,疑问就来了,为什么结果会不一致呢?利用在cmd窗口输入javap -c TestDemo.class命令,对字节码文件进行反编译,发现了问题所在?

 

 

可以看到在案例1中,java代码底层走了StringBuilder,进行字符串拼接,然后调用了StringBuilder的toString方法。

 

 

而案例2中,对class文件进行反编译,发现代码出现了一点变化,并没有走StringBuilder进行字符串拼接。

 

# 总结

 

1、案例1中,通过变量和字符串拼接,java是需要先到内存找变量对应的值,才能进行完成字符串拼接的工作,这种方式java编译器没法优化,只能走StringBuilder进行拼接字符串,然后调用toString方法,当然返回的结果和常量池中的111这个字符串的内存地址是不一样的,因此结果为false。

 

2、案例2中,直接在表达式里写值,java不用根据变量去内存里找对应的值,可以在编译的时候直接对这个表达式进行优化,优化后的表达式从 "111" + "" 直接变成了 "111" ,两个String类型的变量都指向了常量池的111字符串,因此结果为true;

相关文章
|
7月前
StringBuilder和StringBuffer区别是什么?
StringBuilder和StringBuffer区别是什么?
|
7月前
|
缓存 安全 调度
StringBuilder和StringBuffer的区别
StringBuilder和StringBuffer的区别
|
安全 Java
字符串相关类StringBuffer和StringBuilder
字符串相关类StringBuffer和StringBuilder
43 0
|
安全 Java 编译器
详细讲解String拼接原理,介绍StringBuilder和StringBuffer
详细讲解String拼接原理,介绍StringBuilder和StringBuffer
详细讲解String拼接原理,介绍StringBuilder和StringBuffer
|
安全 Java 编译器
Java中String、StringBuffer和StringBuilder字符串拼接原理
String:适用于少量的字符串操作的情况; StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况; StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况;
194 0
Java中String、StringBuffer和StringBuilder字符串拼接原理
StringBuilder案例:字符串拼接
StringBuilder案例:字符串拼接
144 0
|
缓存 安全 Java
StringBuffer 和 StringBuilder 的 3 个区别
StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现几率十分高的一道题。这么简单的一道题,栈长在最近的面试过程中,却经常遇到很多求职者说反,搞不清使用场景的情况。
329 0
StringBuffer 和 StringBuilder 的 3 个区别
|
存储 缓存 安全
StingBuffer 和 StringBuilder 的区别
讲述 StingBuffer 和 StringBuilder 的区别
|
安全 Java
你必须搞清楚的String,StringBuilder,StringBuffer
String,StringBuilder 以及 StringBuffer 这三个类的关系与区别一直是 Java 的经典问题,这次就来讲一下关于这三个类的一些知识 一.
1402 0