### Question:
UTF8StringValue extends StringValue { @Override public int length() { return numberOfCodePoints( bytes, offset, byteLength ); } UTF8StringValue( byte[] bytes, int offset, int length ); @Override void writeTo( ValueWriter<E> writer ); @Override boolean equals( Value value ); @Override int length(); @Override int computeHash(); @Override long updateHash( HashFunction hashFunction, long hash ); @Override TextValue substring( int start, int length ); @Override TextValue trim(); @Override TextValue ltrim(); @Override TextValue rtrim(); @Override TextValue plus( TextValue other ); @Override boolean startsWith( TextValue other ); @Override boolean endsWith( TextValue other ); @SuppressWarnings( "StatementWithEmptyBody" ) @Override boolean contains( TextValue other ); @Override TextValue reverse(); @Override int compareTo( TextValue other ); static int byteArrayCompare( byte[] value1, byte[] value2 ); static int byteArrayCompare( byte[] value1, int value1Offset, int value1Length,
            byte[] value2, int value2Offset, int value2Length ); byte[] bytes();  }### Answer:
@Test void shouldHandleDifferentTypesOfStrings() { for ( String string : STRINGS ) { TextValue stringValue = stringValue( string ); byte[] bytes = string.getBytes( UTF_8 ); TextValue utf8 = utf8Value( bytes ); assertEqual( stringValue, utf8 ); assertThat( stringValue.length(), equalTo( utf8.length() ) ); } }