`

String的拼接

阅读更多
当使用+拼接字符串时,会生成新的String对象,而不是向原有的String对象追加内容。与之形成对比的是StringBuffer类,StringBuffer类使用append()方法追加字符串,向原有对象追加而不是创建新的对象。append()方法返回当前StringBuffer对象,因此可以串联起来使用。


String s = null;  
s += "abc";  
System.out.println(s);  


答案是:nullabc!
就这三行代码, 我问了不下于50个人, 有资深的人也有新手的, 在不运行的情况下全答错了! 可见现在学java的人有很多人都是速成的,而且这种原理级而又看似不怎么实用的东西几乎没什么人去研究, 但是后面说的机试如果能知道String拼接的原理的话,将很容易就解决!

很早的时候我就知道String拼接中间会产生StringBuilder对象(JDK1.5之前产生StringBuffer),但是当时也没有去深究内部, 导致在华为笔试此题就错了!

字符串拼接原理:运行时, 两个字符串str1, str2的拼接首先会调用 String.valueOf(obj),这个Obj为str1,而String.valueOf(Obj)中的实现是return obj == null ? "null" : obj.toString(), 然后产生StringBuilder, 调用的StringBuilder(str1)构造方法, 把StringBuilder初始化,长度为str1.length()+16,并且调用append(str1)! 接下来调用StringBuilder.append(str2), 把第二个字符串拼接进去, 然后调用StringBuilder.toString返回结果!

所以那道题答案的由来就是:StringBuilder.append("null").append("abc").toString();


转自http://blog.csdn.net/zolalad/article/details/30089327
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics