Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: Eric Sosman Newsgroups: comp.lang.java.programmer Subject: Re: StringBuilder Date: Sun, 18 Sep 2011 09:50:03 -0400 Organization: A noiseless patient Spider Lines: 36 Message-ID: References: <96f358c8-a024-40db-b60b-300186c2f813@o10g2000vby.googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sun, 18 Sep 2011 13:50:52 +0000 (UTC) Injection-Info: mx04.eternal-september.org; posting-host="f8igmItKsWs6nM5YanFxAA"; logging-data="31038"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/xB0yWlOSXQbFzJF3J8Pjo" User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20110902 Thunderbird/6.0.2 In-Reply-To: Cancel-Lock: sha1:iMFA/yMEVwWIz/QRGYKi+3BPfA4= Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:8127 On 9/18/2011 9:32 AM, Jan Burse wrote: > Eric Sosman schrieb: >> I don't have old Java source, but I do have an old O'Reilly >> book ("Java In a Nutshell, 2nd Edition, Covers Java 1.1, by David >> Flanagan") that states >> >> The StringBuffer.toString() method does not copy the internal >> array of characters; instead it shares that array with the >> new String object, and makes a new copy for itself only when >> further modifications are made to the StringBuffer object. >> >> Assuming the author was correct, it follows that the implementation >> changed at some later point. Presumably, that change was driven by >> evidence that the "optimization" wasn't worth while. > > I guess first of all probably a reengineering was done, and > StringBuffer was split into AbstractStringBuilder and StringBuffer. > And then StringBuilder was created. The class diagramm is basically: > > AbstractStringBuilder > / \ > StringBuffer StringBuilder I do not know whether buffer-sharing was dropped before, after, or with the introduction of StringBuilder. > Most of the StringBuffer methods are synchronized and then delegate > to the abstract super class. In StringBuilder the methods are > non-synchronized and then also delegate to the abstract super class. Some methods delegate, some do not. StringBuilder.toString() in particular does not delegate to the superclass. -- Eric Sosman esosman@ieee-dot-org.invalid