Minha contribuição, nada de muito diferente, do que foi apresentado. 
Você vai analisar qual o campo de atuação da variável.
Veja só.
Caso você precise de um contador para o número de meses, você pode usar o byte, pois ele pode representar valores inteiros que vão de -128 a + 127.
Como o ano tem 12 meses uma variável do tipo byte é satisfatória.
Por que usar o byte e não o int?
O byte usa 8bits de memória, já o int usa 32 bits (4bytes), logo são quatro vezes + consumo de memória (desnecessária), pois a operação não consome tantos recursos.
Outro exemplo:
Usar um contador para os municípios do Brasil.
https://www.google.com.br/search?q=total+de+município+do+brasil&ie=utf-8&oe=utf-8&client=firefox-b&gws_rd=cr&ei=dWyTWcvAKYGQwgSq1Y74Bw
Como são 5570 municípios, se você usar o byte vai dar errado, pois ele só vai até 127, então você pode usar o short, que tem 16bits e suporta um intervalo numérico entre -32768 e 32767, deixando de lado o int, pois ele vai consumir 2 vezes mais memória.
Assim, é uma questão de intervalo de atuação da variável.
Logo, byte, short, char, int e long estão associados a números inteiros.
O float usa menos memória que o double e ambos estão associados a cálculos com ponto flutuante.
A depender do nível de precisão, o float pode ser usado, mas ele tem menos precisão que o double, mas consome menos memória.
Ex.: Um número com duas casas decimais (R$ 3.54) você pode usar um float, pois a precisão dele é satisfatória.
Cálculos científicos -> double, pois a precisão deve ser a melhor possível.
Então, você avalia o intervalo de atuação da variável e vê qual tipo primitivo pode atender a sua necessidade consumindo menos memória.