Qual a diferença? [RESOLVIDO]

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á !

[quote=pedroroxd]
Nem entre isso? (Sendo jcombo um JComboBox)

String a =String.valueOf(jcombo.getSelectedItem()); String b = jcombo.getSelectedItem().toString(); String c = (String) jcombo.getSelectedItem();[/quote]

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();

Vlw…
Lendo 2 vezes ajuda a memorizar
kkkk

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

[code] 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);[/code]

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

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.

[quote=Mark_Ameba]
O operador i++ na compilação vira i = i +1

Isso são só “syntax sugar” pra ficar mais facil programar.[/quote]

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.

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.

hmm
valew ae :wink:

[quote=sergiotaborda][quote=Mark_Ameba]
O operador i++ na compilação vira i = i +1

Isso são só “syntax sugar” pra ficar mais facil programar.[/quote]

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.[/quote]

Verdade esqueci disso é um operador.

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

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

[quote=pedroroxd]Em questão de velocidade…
(Mesmo que não notável)…

Faz diferença fazer i = i+1 ou i++ ou ++i?[/quote]

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.

Firmeza…
Vlw pelo exclarecimento =)

Eh facil , basta fazer um teste de mesa

[code]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));

}

}[/code]

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

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.

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