1 + 1 = 11?

class test11 {
	public static void main(String[] args) {
		System.out.println ("1 + 1 = " + 1 + 1);
	}
}
  1. Qual a saída do programa acima?
  2. Corrija o programa acima para que o valor impresso seja 2.

class test11 { public static void main(String[] args) { System.out.println ("1 + 1 = " + (1 + 1)); } }
tah certo??

É isso aí Roberto…
Essa não foi tão difícil assim.

:slight_smile:
Abraçoss

class test11 {
  	public static void main(String[] args) {
  		System.out.println ("1 + 1 = " + 2);
  	}
  }

EhEhEhEhE!!!

Q papo eh esse: 1 + 1 = 11. Isso tah errado 1+ 1 = 10

Muito bem, mas alem de resolver e indicar a saida, alguem sabe explicar porque isso acontece?

Esse efeito é causado pela ordem de avaliação dos operadores.

Neste caso é avaliado primeiramente "1 + 1 = " + 1 que é uma concatenação de strings e depois é avaliado o resultado da operação anterior com o + 1 e assim a String fica 1 + 1 = 11
Se colocarmos os parentenses a ordem de avaliação muda, e assim a soma de dois inteiros ocorre primeiro para que depois seja concatenada a string.

Resumidamente é isso! :smiley:

Isso sim é uma resposta! 8)

Pros tarados de plantao, notem que o javac ja faz a conta direto:

[code]public class Foo {

public void main(String[] args) {
System.out.println(“1+1=” + 1+1);
}
}[/code]

Saida:

[code]$ javap -c Foo
Compiled from “Foo.java"
public class Foo extends java.lang.Object{
public Foo();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object.”":()V
4: return

public void main(java.lang.String[]);
Code:
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3; //String 1+1=11
5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return

}[/code]

Mudando o codigo um pouquinho:

[code]public class Foo {

public void main(String[] args) {
System.out.println(“1+1=” + (1+1));
}
}[/code]

Saida:

[code]$ javap -c Foo
Compiled from “Foo.java"
public class Foo extends java.lang.Object{
public Foo();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object.”":()V
4: return

public void main(java.lang.String[]);
Code:
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3; //String 1+1=2
5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return

}[/code]

Notem, de novo, que o calculo ja foi feito direto na compilacao…

Legal esse javap!

lembre sempre que o operador + esta sobrecarregado, ou seja:
existe um “+” para somar numeros;
e um “+” para “somar”(concatenar) strings;

entenda que quando vc faz: “tenho " + 20 + " anos” resulta em uma string: “tenho 20 anos”…
ou seja se na sua utilizacao do operador + existir apenas uma string, todas as outras partes serao tratadas como tal…