JAVA中的“+”、“concat”和“append”

“+”:时String类的一种重载,将“+”后面的对象,转换为String类型,然后在进行字符串的拼接。

“concat”:将指定字符串连接到此字符串的结尾,String的concat方法是写好的,直接可以调用,但是如果拼接的字符串为空,则会抛出空指针异常错误。

“append”:只针对StringBuffer类型,也是连接字符使用的,返回值类型一定是StringBuffer类型,

帮助理解:
① String tmp = “a” + “b” + “c”;
② String tmp = null;
tmp+= “a”;
tmp+= “b”;
tmp+= “c”;
③ String tmp = null;
StringBuffer buf = new StringBuffer();
buf.append(“a”);
buf.append(“b”);
buf.append(“c”);
tmp = buf.toString();

JAVA中的String Class是一个不可变类,所有对一个Sting Object的改变都回导致一个新的String Object的生成.那么对tmp+=a中+符号的实现呢?如果你注意一下StringBuffer的Javadoc会发现.JDK对它的实现是tmp=(new StringBuffer().append(tmp).append(“a”)).toSting(); 这样我们发现②这种方法在隐性生成了一个StringBuffer Object和一个String Object 再乘3就是六个object 的资源耗费.(还不包括String Class 和StringBuffer Class内部使用的Char[])而方法③只用了两个.也许有些程序员会对这些耗费不以为然,的确也是,不过在一些场景下它会成为perfamence的瓶颈.再回头看看①这种方法,它会被JAVA编译器编译为tmp=(new StringBuffer().append(“a”).append(“b”).append(“c”)).to String();我们发现做的和③方法是同样的事.

猜你喜欢

转载自blog.csdn.net/m983373615/article/details/80267234