1 + 1 = 11?

10 respostas
T
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.

10 Respostas

F

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

R

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

:slight_smile:
Abraçoss

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

EhEhEhEhE!!!

C

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

L

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

F

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:

S

Isso sim é uma resposta! 8)

C

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

public class Foo {

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

Saida:

$ 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."<init>":()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

}

Mudando o codigo um pouquinho:

public class Foo {

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

Saida:

$ 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."<init>":()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

}

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

K

Legal esse javap!

C
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…

Criado 28 de maio de 2005
Ultima resposta 19 de jun. de 2005
Respostas 10
Participantes 9