class Fizz {
int x = 5;
public static void main(String[] args) {
final Fizz f1 = new Fizz();
Fizz f2 = new Fizz();
Fizz f3 = FizzSwitch(f1,f2);
System.out.println((f1 == f3) + " " + (f1.x == f3.x));
}
static Fizz FizzSwitch(Fizz x, Fizz y) {
final Fizz z = x;
z.x = 6;
return z;
} }
What is the result?
A. true true
B. false true
C. true false
D. false false
E. Compilation fails
F. An exception is thrown at runtime[/quote]
Eu respondi E. Compilation fails, mas a resposta correta segundo o livro é A. true true, quando fui compilar o código realmente não compilou: “cannot assign a value to final variable f1!”. Agora fiquei confusa?! Eu respondi que não compila por que pra mim a passar f1 como argumento na linha: Fizz f3 = FizzSwitch(f1,f2); não é válido. Qual a opinião de vocês?
Olá Slaydy.
Analisei o código e compilei ele aqui. O resultado foi true true, coincidindo com a resposta do livro.
Não entendi muito bem a sua dúvida, a única atribuição de valor para f1 ocorre na linha
final Fizz f1 = new Fizz(); // declara e inicializa f1
A atribuição do resultado do método FizzSwitch é feita para f3 e não para f1. Apenas o valor do atributo x é alterado, o que neste caso é válido.
[quote=Daniel.F]Vc estão com livro em português pq no meu está falatando este metodo:
static Fizz FizzSwitch(Fizz x, Fizz y) {
final Fizz z = x;
z.x = 6;
return z;
}
[/quote]
Daniel, o meu livro tbm é em portugues e está faltando o método FizzSwitch msm…acho que quando traduziram esqueceram de por ¬¬