String,StringBuilder以及StringBuffer三者之间的区别

来广州面试的第一家鸟公司。就问到了一个一问题。String,StringBuilder以及StringBuffer三者之间的区别;
1,对于运行速度而讲。StringBuiler>StringBuffer>String 。为什么String速度最慢。
举个栗子:String Str = “abc”+“qwe”;jvm虚拟机会对以上操作对象进行以下操作。
String str 1= “abc”;
String str2 = "qwe";
String str = str1 + str2;
这也是正式印证了jvm的工作原理,不停的创造对象,回收对象来进行操作的。
2,对于线程安全来讲、StringBuffer线程是安全的。通过编译器.按住Ctrl键后进去去看以下。StringBuffer源码。就会发现里面很多的方法都是用 synchronized来修饰过的。这里就不解释为什么用 synchronized修饰的线程是安全的好吗?其实我也不是很懂。下节再去讨论!(附上源码自己研究)




public StringBuffer(CharSequence seq) {
        this(seq.length() + 16);
        append(seq);
    }

    public synchronized int length() {
	return count;
    }

    public synchronized int capacity() {
	return value.length;
    }


    public synchronized void ensureCapacity(int minimumCapacity) {
	if (minimumCapacity > value.length) {
	    expandCapacity(minimumCapacity);
	}
    }

    /**
     * @since      1.5
     */
    public synchronized void trimToSize() {
        super.trimToSize();
    }

    /**
     * @throws IndexOutOfBoundsException {@inheritDoc}
     * @see        #length()
     */
    public synchronized void setLength(int newLength) {
	super.setLength(newLength);
    }

    /**
     * @throws IndexOutOfBoundsException {@inheritDoc}
     * @see        #length()
     */
    public synchronized char charAt(int index) {
	if ((index < 0) || (index >= count))
	    throw new StringIndexOutOfBoundsException(index);
	return value[index];
    }

    /**
     * @since      1.5
     */
    public synchronized int codePointAt(int index) {
        return super.codePointAt(index);
    }

    /**
     * @since     1.5
     */
    public synchronized int codePointBefore(int index) {
        return super.codePointBefore(index);
    }

    /**
     * @since     1.5
     */
    public synchronized int codePointCount(int beginIndex, int endIndex) {
	return super.codePointCount(beginIndex, endIndex);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值