JAVA中的String类--字符链接运算符“+”

来源:互联网 发布:linux 局域网 编辑:程序博客网 时间:2024/06/01 17:15

关于“+”运算符,不同的平台实现上可能会有不同:
1、官方JDK1.7的实现:当使用“+”时,会创建一个临时的StringBuilder对象,该对象调用append()方法负责字符串的链接,然后调用toString()方法转化成字符串String对象。

String str=new String("this is str");str=str+"!"//等价下面的//str=new StringBuilder().append(str).append("!").toString();System.out.println(str);

2、Eclipse上的实现
不同的编译器在处理运算符“+”时会略有不同,如果“+”左边的操作数是基本数据类型或者String类型时,处理过程是:

int s1=10;//String str=s1+"!";String str=new StringBuilder(String.valueOf(s1)).append("!").toString();    

3、使用运算符“+”链接两个字符串时,若两个都是编译时字符串常量,那么在编译时就会进行连接。

String str1="abc"+"cse";//运行时不创建String str2="cde"+str1;//运行时创建String str3=str1+str2;//运行时创建

4、关于“+”的性能
这里给出一个判断其性能的程序,因为“+”会常见临时对象,所以在使用次数比较多时对性能有很大影响。

public class main {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        long start,stop;        String str1="";        String str2="";        start=System.nanoTime();        for (int i = 0; i < 10000; i++) {            str1=str1+i;        }        stop=System.nanoTime();        System.out.println("use \"+\""+(stop-start));        start=System.nanoTime();        StringBuilder stringBuilder=new StringBuilder();        for (int i = 0; i < 10000; i++) {            stringBuilder.append(i);        }        str2=stringBuilder.toString();        stop=System.nanoTime();        System.out.println("do not use \"+\""+(stop-start));    }}
0 0
原创粉丝点击