Check out the API spec for String. If you look at the description for the startsWith method, you'll see this:
Returns: true if the character sequence represented by the argument is a prefix of the character sequence represented by this string; false otherwise. Note also that true will be returned if the argument is an empty string or is equal to this String object as determined by the equals(Object) method.
When you're invoking a static method through an object reference, the JVM doesn't inspect the reference to see what it references, it only looks at its type and then invokes the static method for that class. Take a look at this section of the JLS: §22.214.171.124 Example: Target Reference and Static Methods. It has an example that illustrates this exact point. Corey