Re: [PATCH] FindBugs: don't use new String(String) in RefDatabase
From: Yann Simon <hidden>
Date: 2016-06-15 22:47:03
2009/7/10 Shawn O. Pearce [off-list ref]:
Yann Simon [off-list ref] 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