Return double apenas com o valor inteiro

Por que esse codigo…:

public class Teste
{
	public static void main(String[] args)
	{		
		Teste teste = new Teste();
		
		System.out.println(get());
		System.out.println(teste.get2());
		System.out.println((double)5/3);
	}
	
	public static double get() {
		return 5/3;
	}
	
	public double get2() {
		double x = 5/3;
		//return 5/3;
		return x;
	}
}

tem esta saida…:

1.0
1.0
1.6666666666666667

???

Não vejo razão.

Tenta colocar um static no segundo public double.

http://www.guj.com.br/articles/121

A divisão de 2 inteiros sempre retorna um inteiro. Sempre.

No método ‘get’ você divide 5 por 3. São dois inteiros. Portanto o resultado é 1 e o resto é 2.

No método ‘get2’ você faz o mesmo e armazena o resultado em um double. Note que o valor da variável também será 1.

Quando você faz isso:

System.out.println((double)5/3);

Você está fazendo um cast do 5 para double e depois dividindo por 3. É o mesmo que fazer isso:

System.out.println(5.0/3);

Como um dos operadores é double, o resultado também é um double (no caso, 1.666666666667).

Depois de entender o que eu disse acima, pense (sem compilar!) no que seria impresso com a seguinte linha:

System.out.println((double)(5/3));

exatamente como o nosso amigo marcobiscaro2112 disse.

Por mais que o retorno do seu método seja double, a operação está sendo feita entre dois número inteiros.
Uma forma seria criando uma variável double e atribuindo a ela um valor e em seguida realizar o cálculo utilizando as variáveis criadas.
Outra forma, mas não tão correta seria fazer da seguinte forma:

public static double get() { return 5d/3d; }
…onde o “d” após o número indica que esse é do tipo double;

[quote=marcobiscaro2112]Depois de entender o que eu disse acima, pense (sem compilar!) no que seria impresso com a seguinte linha:

System.out.println((double)(5/3)); [/quote]

Hmmmm

Agora sim vejo razão.

O cast vale apenas para o 5, e não pro resultado da divisão 5/3, que é o caso do seu exemplo (que também resultaria em 1.0).

Muito obrigado pelo esclarecimento.