We can skip bounds check and null check for Charset in case we use the array entirely and the Charset is either default one or proven to be non-null.
Benchmark results: before Benchmark Mode Cnt Score Error Units StringConstructor.newStringFromArray avgt 50 4,815 ± 0,154 ns/op StringConstructor.newStringFromArrayWithCharset avgt 50 4,462 ± 0,068 ns/op StringConstructor.newStringFromArrayWithCharsetName avgt 50 8,653 ± 0,040 ns/op StringConstructor.newStringFromRangedArray avgt 50 5,090 ± 0,066 ns/op StringConstructor.newStringFromRangedArrayWithCharset avgt 50 4,550 ± 0,041 ns/op StringConstructor.newStringFromRangedArrayWithCharsetName avgt 50 8,080 ± 0,055 ns/op after Benchmark Mode Cnt Score Error Units StringConstructor.newStringFromArray avgt 50 4,595 ± 0,053 ns/op StringConstructor.newStringFromArrayWithCharset avgt 50 4,038 ± 0,062 ns/op StringConstructor.newStringFromArrayWithCharsetName avgt 50 8,035 ± 0,031 ns/op StringConstructor.newStringFromRangedArray avgt 50 4,084 ± 0,007 ns/op StringConstructor.newStringFromRangedArrayWithCharset avgt 50 4,014 ± 0,008 ns/op StringConstructor.newStringFromRangedArrayWithCharsetName avgt 50 7,466 ± 0,071 ns/op ------------- Commit messages: - 8289908: Skip bounds check for cases when String is constructed from entirely used byte[] Changes: https://git.openjdk.org/jdk/pull/9407/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9407&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8289908 Stats: 90 lines in 5 files changed: 77 ins; 1 del; 12 mod Patch: https://git.openjdk.org/jdk/pull/9407.diff Fetch: git fetch https://git.openjdk.org/jdk pull/9407/head:pull/9407 PR: https://git.openjdk.org/jdk/pull/9407