This is the difference between accessing a field (no parentheses) and calling a method (requires parentheses, even if there are no arguments to the method).
Historically, arrays could have had a method in addition to or instead of a field. Strings could have had a field in addition to a method. A field is simpler, which is probably why arrays use it, but there are at least two reasons why it's good for String to have a length method:
String implements the CharSequence interface, which defines a length() method, so String has to have that method. (Defining fields isn't a feature of interfaces, except for static final constants.) String could have length as a method and a field but that would be distracting.
Flexibility. String's internal implementation has changed over time: at one time it used an internal char array and separate offset and length fields which defined a region within the char array. That was done so that substrings could share the parent string's char array (with different offset and length) instead of copying the array. It was later found that that optimization was rarely beneficial, so now, String has only a char array of the correct size, and the length method reads the array's length field. String no longer has its own length field, not even a private one, but they couldn't have removed it if it were part of the class's public API, which would give less flexibility to experiment with internal implementations.