O problema é que nem sempre o ResultSet é inteiro carregado logo que é executado e tal. Assim essa implementação básica tem uma melhor performance do que se ele sempre tiver que realizar esse passo a mais para checar o tamanho do ResultSet.
O que você pode fazer também é colocar um COUNT no seu SELECT mesmo e aí pegar o valor deste campo.
Não há um método para retornar o número de registros pois os bancos diferem muito nesse ponto, e muitos deles vão trazendo os registros para o resultSet a medida que você vai executando resultSet.next();
Se você realmente necessita saber quantos registros tem você pode utilizar o método descrito pelo Bani, mas pode demorar bastante dependendo do tamanho de registros retornados, é sempre bom levar isso em consideração.
Em tempo, procure evitar a concatenação de Strings no modo como você fez, é mais eficiente utilizar o StringBuffer, tem um artigo no Guj que explica isso: