Incremento

Pessoal,

no livro Use a Cabeça!, há uma parte em que é falado sobre incrementos de variáveis:

var++ é diferente de ++var, isto é, no primeiro caso, a atribuição é feita antes da soma. No segundo, é o contrário.

Mas ao fazer um loop, se eu utilizar qualquer uma das formas para controlá-lo, o resultado é o mesmo.

Alguém poderia me especificar um caso em que as duas terão ações distintas?

Valeu!

[ ]

int i = 0;
int j = i++;

Como o ++ vem depois ele primiero atribuiu o valor corrente de i ao j para só depois incrmeentar o i. Daí o i fica com 1 e o j com 0.

Se eu teivesse fieto assim:

int i = 0;
int j = ++i;

tanto o j como o i ficariam com 1.

isso eu ja tinha sacado cara, mas valeu.

a questão é a seguinte: em um while, por exemplo, tanto faz usar ++var ou var++?

[ ]

Kra, de um modo geral sim. Não dá pra generalizar. Se vc for usar uma variavel contadora VIA DE REGRA não fará diferença, mas pode acontecer alguma situação q fará. Eu já me deparei algumas vezes com situações q fazia toda diferença, agora não me recordo nd, mas me lembro q ja occorreu mais de uma vez.

então tranquilo.

fiquei com essa duvida pois sempre utilizei var++ para loops e ao ver um exemplo com ++var fiquei confuso.

vlw!

[ ]

Olá jPscoralicK.

Só há alguma diferença entre o pré-incremento e o pós-incremento quando eles estão inseridos em uma expressão maior, ou seja, quando a expressão não é formada só por uma instrução de incremento, seja pré ou pós. Obviamente o mesmo se aplica ao pré-decremento e pós-decremento. Exemplo:

[code] public class Teste
{
public static void main(String[] args)
{
int numero1 = 0;

  numero1++;

  System.out.println("Numero 1 : " + numero1);

  ++numero1;   

  System.out.println("Numero 1 : " + numero1);

}
}[/code]

As duas instruções de incremento acima, por estarem isoladas, fazem exatamente a mesma coisa, ou seja, aumenta em uma unidade o valor da váriavel numero1. Mas nem sempre eles são usados em instruções isoladas. Exemplo:

[code] public class Teste
{
public static void main(String[] args)
{
int numero1 = 0;

  System.out.println("Numero 1 : " + numero1);
  
  int numero2 = numero1++ + 3;

  System.out.println("Numero 1 : " + numero1);
  System.out.println("Numero 2 : " + numero2);

  int numero3 = ++numero1 + 3;

  System.out.println("Numero 1 : " + numero1);
  System.out.println("Numero 2 : " + numero2);
  System.out.println("Numero 3 : " + numero3);

}
}[/code]

Nas expressões aritméticas acima onde é usado o pré-incremento, primeiro é incrementado o valor da váriavel, e então é usado este novo valor na expressão. Já no pós-incremento a expressão é avaliada primeiro, e só então a variável numero1 é incrementada.

Sendo assim, no caso específico de uma instrução no corpo de um while, se essa instrução estiver isolada não fará diferença alguma em usar o pré-incremento ou o pós-incremento. Exemplo:

[code] while(numero < 10)
{
System.out.println(numero);

numero++; // Poderia ser usado o pré-incremento sem alteração no resultado
}[/code]

Agora caso a operação de incremento esteja na condição de iteração do while fará sim diferença se é usada a versão pré ou pós do operador de incremento.

while(numero++ < 10) { System.out.println(numero); }

while(++numero < 10) { System.out.println(numero); }
No primeiro caso será impresso os números de 1 até 10, já no segundo o que será impresso é os números de 1 até 9.

Grande explicação elomarns! Entendi tudo agora.

[ ]