• String&StringBuffer&StringBuilder区别


    String

     String类是final类故不可以继承,也就意味着String引用的字符串内容是不能被修改。String有两种实例化方式
       (1)直接赋值(例中,String str = "Hello";就是直接赋值实例化了)
       (2)使用new调用构造方法完成实例化;
    String str = "Hello";srt:只有一个对象
    String str2 = new String("abc");St2:有2个对象

    public class LianXi2 {
    	public static void main(String[] args) {
    		String str = "Hello";  //引用str指向对象"Hello"
    		str = str + " World";  //引用str指向对象str + " World" (str + " World"是另外一个对象)
    		System.out.println("str=" + str);
    } }
     
         要注意的是:String类对象内容不能修改,但并不代表其引用不能改变,下面通过内存的分配图说明字符串不可改变的真正含义:
    堆内存里面开辟了3个对象:"Hello"、"world!"和"hello world!"这个三个对象。str首先指向对象"Hello",经过拼接后,str指向对象"hello world!"。原来的内容并没有改变。
     因此,在以后的开发中,若要经常修改字符串的内容,请尽量少用String,因为字符串的指向“断开-连接”会大大降低性能;对于要经常修改内容的情况,建议使用:StringBuilder、StringBuffer。

    stringbuffer:线程安全

    stringbuilder:线程不安全(性能最高)

    2个类的方法没什么区别

    String&Stringbuffer&Stringbuilder性能测试

    package cn.com.string;
    
    /**
     * StringBuliderTest
     *
     * @描述:StringBulider性能演示
     */
    public class StringBuliderTest {
    	// 定义2个常量
    	private static final String base = "abc";
    	private static final int count = 2000000;
    
    	/**
    	 * 测试String性能方法
    	 */
    	public static void stringTest() {
    		long begin, end;
    		begin = System.currentTimeMillis(); // 开始时间
    		String test = new String(base);
    		for (int i = 0; i < count / 100; i++) {
    			test = test + "add";
    		}
    		end = System.currentTimeMillis(); // 结束时间
    		System.out.println("测试string所用时间:" + (end - begin));
    	}
    
    	/**
    	 * 测试stringbuffer性能方法
    	 */
    	public static void stringbufferTest() {
    		long begin, end;
    		begin = System.currentTimeMillis(); // 开始时间
    		StringBuffer test = new StringBuffer(base);
    		for (int i = 0; i < count; i++) {
    			test = test.append("add");
    		}
    		end = System.currentTimeMillis(); // 结束时间
    		System.out.println("测试StringBuffer所用时间:" + (end - begin));
    	}
    
    	/**
    	 * 测试stringbuilder性能方法
    	 */
    	public static void stringbuilderTest() {
    		long begin, end;
    		begin = System.currentTimeMillis(); // 开始时间
    		StringBuilder test = new StringBuilder(base);
    		for (int i = 0; i < count; i++) {
    			test = test.append("add");
    		}
    		end = System.currentTimeMillis(); // 结束时间
    		System.out.println("测试stringbuilder所用时间:" + (end - begin));
    	}
    
    	/**
    	 * mai方法
    	 * 
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		stringTest();
    		stringbufferTest();
    		stringbuilderTest();
    	}
    	
    	/**输出结果:
    	 测试string所用时间:1114
    	测试StringBuffer所用时间:140
    	测试stringbuilder所用时间:63
    	 */
    }
    

      

      

  • 相关阅读:
    ip聚合(百度之星资格赛1003)
    encoding(hdoj1020)
    Candy Sharing Game(hdoj1034)
    you can Solve a Geometry Problem too(hdoj1086)
    Holding Bin-Laden Captive!(hdoj1085)代码并未完全看懂
    Computer Transformation(hdoj 1041)
    Digital Roots(hdoj1013)
    humble number(hd1058)
    FatMouse' Trade(hdoj1009)
    1021 Fibonacci Again (hdoj)
  • 原文地址:https://www.cnblogs.com/huyuyu/p/6389400.html
Copyright © 2020-2023  润新知