Dúvida

se eu declarar uma variavel desta maneira

float value=2.5; // java considera como double

desta outra forma

float value=2.5f;//desta forma java condidera com float

é isso mesmo galera estou com dúvidas

A seguinte linha não compila:

float value = 2.5;

Ela não compila pois literais de ponto flutuante em Java são double e um valor double não necessariamente “cabe” em um float.

o mesmo vale pra long cara…?

Não. Literais inteiras em Java são do tipo int. A linha seguinte faz uma conversão de int para long:

long value = 5;

Essa conversão ocorre neste caso porque long é um tipo “maior” do que int, por isso pode ser feita sem problemas.

No caso de tipos inteiros “menores” do que int, como byte ou short, o compilador pode ser esperto. As linhas seguintes compilam, mesmo eu tentando atribuir uma literal inteira a tipos que são “menores” que int:

byte value = 3; short value2 = 5;

Nestes casos, o compilador percebe que o valor da literal cabe nos tipos byte e short e faz a conversão em tempo de compilação.

Daí você deve imaginar porque o compilador não faz uma conversão dessas no caso do double e do float. Em uma palavra: precisão. Como o tipo double suporta uma precisão maior que o tipo float, mesmo o número 2.5 é maior do que cabe numa variável float.