Am 25.02.2010 23:07, schrieb Alan Bateman:
Kelly O'Hair wrote:
Yup.  My eyes must be tired, I didn't see that. :^(
Too many repositories in the air at the same time. The webrev has been refreshed. Thanks Ulf.



Another thought:

In the constructors of String we could initialize hash = Integer.MIN_VALUE except if length == 0.
Then we could stay at the fastest version:

    public int hashCode() {
        int h = hash;
        if (h == Integer.MIN_VALUE) {
            h = 0;
            char[] val = value;
            for (int i = offset, limit = count + i; i != limit; )
                h = 31 * h + val[i++];
            hash = h;
        }
        return h;
    }

As an alternative we could use:
private static final int UNKNOWN_HASH = 1;
Justification:
Using a small value results in little shorter byte code and machine code footprint after compilation. Additionally on some CPU's this likely will perform little better, but never worse.

Please note:
Original loop causes 2 values to increment:
            for (int i = 0; i < len; i++) {
                h = 31*h + val[off++];
            }
This is inefficient as I have proved in a little micro-benchmark.

-Ulf



Reply via email to