class test11 {
public static void main(String[] args) {
System.out.println ("1 + 1 = " + 1 + 1);
}
}
- Qual a saída do programa acima?
- 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);
}
}
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.
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!
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…