Qual a diferença? [RESOLVIDO]

14 respostas
pedroroxd

Pessoal, tava vendo 1 tópico ali, e bateu 1 dúvida…

Qual a diferença entre:

i+=2; i=i+2;
E entre:

i+=1; i=i+1; i++; ++i;
E entre:(Sendo jcombo um JComboBox)

String a =String.valueOf(jcombo.getSelectedItem()); String b = jcombo.getSelectedItem().toString(); String c = (String) jcombo.getSelectedItem();
O modo de operação é o mesmo?
Agradeço desde já !

14 Respostas

pablosaraiva

pedroroxd:

Nem entre isso? (Sendo jcombo um JComboBox)

String a =String.valueOf(jcombo.getSelectedItem()); String b = jcombo.getSelectedItem().toString(); String c = (String) jcombo.getSelectedItem();

Opa! Peraí!

O método getSelectedItem do JComboBox retorna um Object.

Se você fizer a chamada da forma a ou b, não deve dar erro, pois será invocado o método toString() do objeto.

Agora, no caso c, você vai ter uma runtime exception caso o objeto não seja string. O typecasting deve ser evitado sempre que possível.

String c = (String) jcombo.getSelectedItem();
pedroroxd

Vlw…
Lendo 2 vezes ajuda a memorizar
kkkk

pablosaraiva

Rode o seguinte código para ver o erro acontecendo apenas no terceiro caso.

JComboBox jcombo = new JComboBox();
		
		Integer i = 1;
		
		jcombo.addItem(i);
		
		String a = String.valueOf(jcombo.getItemAt(0));
		String b = jcombo.getItemAt(0).toString();
		String c = (String) jcombo.getItemAt(0);

Usei da licença poética para trocar o getSelectedItem() por getItemAt() pra ficar mais simples o exemplo aqui. :)

Marky.Vasconcelos

Nenhuma.

O operador i += X na hora de compilação vira i = i + X
O operador i++ na compilação vira i = i +1

Isso são só “syntax sugar” pra ficar mais facil programar.

sergiotaborda

Mark_Ameba:

O operador i++ na compilação vira i = i +1

Isso são só “syntax sugar” pra ficar mais facil programar.

e ++i vira o quê ?

i++ não vira coisa nenhuma é uma instrução só. assim como i-- e ++i e --i
++ é um operador unário

++ não é sintax sugar.

pablosaraiva

Sim.

Só pra deixar mais claro o que o sergiotaborda disse.

b vale 0.

Se você fizer:

a = b++;

Você tera a = 0 e b = 1.

Pois primeiro “a” recebe o valor de “b” e após “b” é acrescido de um.

Mas se você fizer:

a = ++b;
Você terá a = 1 e b = 1.
Pois ele primeiro soma 1 em “b” e depois “a” recebe o novo valor de “b”.

O que também é diferente de:

a = b + 1, onde a = 1 e b = 0.
Pois nesse caso não alteramos o valor de b.

Então temos que ter atenção na hora do uso dos operadores para não gerar confusão e erros difíceis de encontrar.

pedroroxd

hmm
valew ae :wink:

Marky.Vasconcelos

sergiotaborda:
Mark_Ameba:

O operador i++ na compilação vira i = i +1

Isso são só “syntax sugar” pra ficar mais facil programar.

e ++i vira o quê ?

i++ não vira coisa nenhuma é uma instrução só. assim como i-- e ++i e --i
++ é um operador unário

++ não é sintax sugar.

Verdade esqueci disso é um operador.

pedroroxd

Em questão de velocidade…
(Mesmo que não notável)…

Faz diferença fazer i = i+1 ou i++ ou ++i?

sergiotaborda

pedroroxd:
Em questão de velocidade…
(Mesmo que não notável)…

Faz diferença fazer i = i+1 ou i++ ou ++i?

Sim.

Operadores de incremento executam em um passo, soma e atribuição em dois.
Se java fosse uma linguagem nativa o i++ seria mapeado para uma instrução nativa do processador enquanto a atribução são sempre duas instruções.

Na realidade i = i + 1 nunca se usa em java por questões de legebilidade, não tanto de velocidade.

pedroroxd

Firmeza…
Vlw pelo exclarecimento =)

edmarr
Eh facil , basta fazer um teste de mesa
public class TestaOperador {

	public static void main(String[] args) {
		int i = 0;
		int j = 0;
		
		System.out.println("Valor de i : " +   (i++));
		System.out.println("Valor de j : " +   (++j));

	}

}

vc verá que no ++j , sera apresentado um valor diferente , significa q ele faz a operação antes de usar a variavel .

ViniGodoy

O mais rápido desses 3 é o ++i.

No caso de i = i+1, é gerado uma cópia da variável i, essa cópia é somada a 1, e só então o valor de i é modificado. Isso pq vc poderia fazer:
a = i+1; e não alterar o valor de i.

No caso do i++, é a mesma coisa. Uma cópia da variável i é gerada, e então acrescida de 1, para somente na linha seguinte ser somada.

No caso de ++i, a soma ocorre imediatamente.

pedroroxd

Sakei vini
Vlws ae dinovo =)
Vou dar como resolvido…

Criado 16 de dezembro de 2009
Ultima resposta 17 de dez. de 2009
Respostas 14
Participantes 6