> If you allowed a two-time pass of the primitive array you could > actually create a version that only allocated the actual String and > backing array.
I tried implementing it https://gist.github.com/kaspernielsen/62e4eedffdb395228777925551a45e7f And got a 30-40 % performance increase. ToString2.toStringExisting 1 avgt 5 16.855 ± 0.960 ns/op ToString2.toStringExisting 10 avgt 5 79.247 ± 3.142 ns/op ToString2.toStringExisting 100 avgt 5 814.197 ± 46.062 ns/op ToString2.toStringExisting 1000 avgt 5 15288.172 ± 1649.338 ns/op ToString2.toString2Pass 1 avgt 5 13.671 ± 0.142 ns/op ToString2.toString2Pass 10 avgt 5 54.090 ± 0.724 ns/op ToString2.toString2Pass 100 avgt 5 513.508 ± 6.063 ns/op ToString2.toString2Pass 1000 avgt 5 9189.950 ± 47.059 ns/op ToString2.toStringExisting:·gc.alloc.rate.norm 1 avgt 5 80.000 ± 0.001 B/op ToString2.toStringExisting:·gc.alloc.rate.norm 10 avgt 5 160.000 ± 0.001 B/op ToString2.toStringExisting:·gc.alloc.rate.norm 100 avgt 5 1664.000 ± 0.001 B/op ToString2.toStringExisting:·gc.alloc.rate.norm 1000 avgt 5 23536.006 ± 0.001 B/op ToString2.toString2Pass:·gc.alloc.rate.norm 1 avgt 5 48.000 ± 0.001 B/op ToString2.toString2Pass:·gc.alloc.rate.norm 10 avgt 5 120.000 ± 0.001 B/op ToString2.toString2Pass:·gc.alloc.rate.norm 100 avgt 5 840.000 ± 0.001 B/op ToString2.toString2Pass:·gc.alloc.rate.norm 1000 avgt 5 9848.004 ± 0.001 B/op Don't know if it is something worth adding? /Kasper