Re: [PATCH] FindBugs: don't use new String(String) in RefDatabase
- From
Yann Simon <yann.simon.fr@gmail.com>
- Date
- Jul 13, 2009, 08:07 UTC
- Message-ID
- <551f769b0907130107j51d32e4er54e125f9dc61dd80@mail.gmail.com>
- In-Reply-To
- <20090710153441.GF11191@spearce.org>
2009/7/10 Shawn O. Pearce <spearce@spearce.org>:
Show 22 quoted lines
> Yann Simon <yann.simon.fr@gmail.com> wrote:
> >
> > However, using the trick newString = new String(aString.substring(),
> > i) does not work on all JVM.
> > With an IBM JVM, the newString will still contain the original array of chars.
> >
> > Another solution that work on all JVM could be:
> > newString = new String(aString.substring(i).toCharArray())
> > Or
> > newString = new String(aString.toCharArray(), i, aString.length() - i)
> >
> > I like the latter one.
>
> I prefer this. It should always do what we want, and at a lower
> temporary memory footprint (one less copy of the name). IIRC Robin
> rejected it earlier because it wasn't obvious what we were doing. I
> say hogwash, its clear as mud.
>
> + private static String copy(final String src, final int off, final int end) {
> + return new StringBuilder(end - off).append(src, off, end).toString();
> + }
> +This method is quite clear. One line javadoc would make it even clearer... :p (and maybe make Robin happy)
And you're right: by using a StringBuilder, we need one less arraycopy.
After committing your change, we can remove the entry to silent FindBugs. (commit 21c3d82824075cd1f140b3bcf252dfaffe0fc96c)
Yann