+1
2010/9/24 Oliver Deakin <[email protected]>
> Hi all,
>
> For String.concat(), the spec says:
>
> "If the length of the argument string is 0, then this String object is
> returned. Otherwise, a new String object is created, representing a
> character sequence that is the concatenation of the character sequence
> represented by this String object and the character sequence represented by
> the argument string."
>
> On Harmony the following test prints "Returned the same String":
>
> public class Test {
> public static void main(String[] args) {
> String s1 = "";
> String s2 = "s2";
> String s3 = s1.concat(s2);
> if(s3 == s2)
> System.out.println("Returned the same String");
> }
> }
>
> This is because in Harmony's String.concat() we check for both the
> parameter string and "this" to have length >0 before we do a concatenation,
> otherwise we just return one or the other of the Strings. On the RI it does
> not print anything, which agrees with the spec as far as I can see. To match
> the spec here, we just need to modify concat to create a new String in all
> cases except when string.count==0 [1]. Since String is a sensitive class, I
> thought I'd run this by the list before I committed it. Any comments?
>
> Regards,
> Oliver
>
> [1]
> Index: String.java
> ===================================================================
> --- String.java (revision 1000855)
> +++ String.java (working copy)
> @@ -678,14 +678,17 @@
> * specified string.
> */
> public String concat(String string) {
> - if (string.count > 0 && count > 0) {
> - char[] buffer = new char[count + string.count];
> + if (string.count == 0) {
> + return this;
> + }
> +
> + char[] buffer = new char[count + string.count];
> + if (count > 0) {
> System.arraycopy(value, offset, buffer, 0, count);
> - System.arraycopy(string.value, string.offset, buffer, count,
> - string.count);
> - return new String(0, buffer.length, buffer);
> }
> - return count == 0 ? string : this;
> + System.arraycopy(string.value, string.offset, buffer, count,
> + string.count);
> + return new String(0, buffer.length, buffer);
> }
>
> /**
>
>
> --
> Oliver Deakin
> Unless stated otherwise above:
> IBM United Kingdom Limited - Registered in England and Wales with number
> 741598.
> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
>
>