Java入门--String中三种加法的区别
2009-07-23 12:40
429 查看
String中三种加法的区别
JAVA的确是一种令程序员陷入两难境地的言
语, 确切的说是思想. 它提供了如此丰富的library,让程序员能够很容易的写出功能强大的程序. 同时它也封装了如此多的细节, 让程序员能够轻
易的写出很拙略的程序. 它所代表的object指向思想设计之初是为了把程序员从纷繁复杂的编程细节中解放出来,来达到对已有程序的利用. 但是在编
程 实际上又要求程序员了解其实现的细节而避免写出因调用已有library不正引起的performance慢的,耗费系统资源多的程序.通常成为一个
优秀的JAVA程序员需要较长时间的经验积累,包括从程序的tuning中,或从其他有经验的程序员口中,才知道一定功能需要怎样实现,在程序中需要避免
那些问题.但这往往是比较片面的,知其然而不知其所以然.我想大多数程序员都有类似的经历,举一个简单的例子,下面有三种对String的累加操作.
① 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程序员在任意的用这三种方法的任一种,无视它们的区别.有 些程序员知道第三种方法好一直在用而不知其为什么好,以至于作为
经
验教条的传授给JAVA新手.真正的答案是什么呢?让我们揭开JAVA String Class和StringBuffer Class的封装面纱看看
它的内部实现.在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();我们发
现做的和③方法是同样的事.
JAVA的确是一种令程序员陷入两难境地的言
语, 确切的说是思想. 它提供了如此丰富的library,让程序员能够很容易的写出功能强大的程序. 同时它也封装了如此多的细节, 让程序员能够轻
易的写出很拙略的程序. 它所代表的object指向思想设计之初是为了把程序员从纷繁复杂的编程细节中解放出来,来达到对已有程序的利用. 但是在编
程 实际上又要求程序员了解其实现的细节而避免写出因调用已有library不正引起的performance慢的,耗费系统资源多的程序.通常成为一个
优秀的JAVA程序员需要较长时间的经验积累,包括从程序的tuning中,或从其他有经验的程序员口中,才知道一定功能需要怎样实现,在程序中需要避免
那些问题.但这往往是比较片面的,知其然而不知其所以然.我想大多数程序员都有类似的经历,举一个简单的例子,下面有三种对String的累加操作.
① 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程序员在任意的用这三种方法的任一种,无视它们的区别.有 些程序员知道第三种方法好一直在用而不知其为什么好,以至于作为
经
验教条的传授给JAVA新手.真正的答案是什么呢?让我们揭开JAVA String Class和StringBuffer Class的封装面纱看看
它的内部实现.在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();我们发
现做的和③方法是同样的事.
相关文章推荐
- Java中String三种加法的区别
- Java的String中三种加法的区别
- Java中String三种加法的区别
- Java中String三种加法的区别
- 讨论java String中三种加法的区别
- Java中String三种加法的区别
- java基础问题(1)——三种String、Map概括、Arraylist和Linkedlist的区别、实例化顺序
- String中三种加法的区别
- Java 中 String的三种判断方式NotEmpty,NotNull和@NotBlank的区别
- JAVA中string.repalce()和string.replaceAll()有什么区别?
- Java杂谈之StringBuffer----兼带String,StringBuffer,StringBuilder的区别
- Java String,StringBuilder和StringBuffer的用法和区别
- 第001节 java中String、StringBuffer、StringBuilder的区别
- JAVA中String与StringBuffer的区别
- Java:String、StringBuffer和StringBuilder的区别
- Java中String 和StringBuffer的区别
- java学习心得(一) String的不可修改以及 == 和equal的区别
- java中创建String类型对象的两种方式以及在使用equals()和“==”两种方法时的区别
- java中string的replace和replace的区别
- JAVA中String与StringBuffer的区别