1. G.
A linha 5 não compila. Essa questão está verificando se você está prestando atenção nos tipos. numFish é um int e 1 é um int. Assim sendo, nós fizemos uma adição numérica, resultando em 5. O problema é que nós não podemos guardar um int em uma variável String. Supondo que a linha 5 fosse: String anotherFish = numFish + 1 + "";. Neste caso, a resposta pode ser as opções A e D. A variável definida na linha 5 seria "5", e ambas declarações de saída usuariam concatenação.
1. G. Line 5 does not compile. This question is checking to see if you are paying attention to the types. numFish is an int and 1 is an int. Therefore, we use numeric addition and get 5. The problem is that we can’t store an int in a String variable. Supposing line 5 said String anotherFish = numFish + 1 + "";. In that case, the answer would be options A and D. The variable defined on line 5 would be the string "5", and both output statements would use concatenation.2. A, C, D.
O código compila. A linha 3 aponta para a String no pool de string. A linha 4 chama o construtor de String explicitamente, criando um objeto diferente de s. As linhas 5 e 7 verificam se há igualdade de objeto, o que é verdade, e então imprime one e three. A linha 6 usa igualdade de objeto de referência, o qual não é verdade pois nós temos objetos diferentes. A linha 8 também compara referências mas é verdade pois ambas referências apontam para o objeto do pool de string. Finalmente, a linha 9 compara o objeto um do pool de string com um que foi explicitamente construído e retorna false.
2. A, C, D. The code compiles fine. Line 3 points to the String in the string pool. Line 4 calls the String constructor explicitly and is therefore a different object than s. Lines 5 and 7 check for object equality, which is true, and so print one and three. Line 6 uses object reference equality, which is not true since we have different objects. Line 8 also compares references but is true since both references point to the object from the string pool. Finally, line 8 compares one object from the string pool with one that was explicitly constructed and returns false.3. B, C, E.
Imutável significa que o estado do objeto não muda depois de criado. Objetos imutáveis podem ser coletados como objetos mutáveis. String é imutável. StringBuilder pode ser mudado com método como o append(). Embora o StringBuffer não esteja no exame, você deve saber isso de qualquer forma em caso de questões antigas não terem sido removidas.
3. B, C, E. Immutable means the state of an object cannot change once it is created. Immutable objects can be garbage collected just like mutable objects. String is immutable. StringBuilder can be mutated with methods like append(). Although StringBuffer isn’t on the exam, you should know about it anyway in case older questions haven’t been removed.4. B.
Este exemplo usa métodos de encadeamento. Depois da chamada do append(), a variável sb contém "aaa". Esse resultado é passado para o primeira chamada do insert(), que insere isso no índice 1. Nesse ponto sb contém "abbbaa". Esse resultado é passado para o final do insert(), que insere no índice 4, resultando em "abbaccca".
4. B. This example uses method chaining. After the call to append(), sb contains "aaa". That result is passed to the first insert() call, which inserts at index 1. At this point sb contains abbbaa. That result is passed to the final insert(), which inserts at index 4, resulting in abbaccca.5. F.
A questão está tentando te distrair em prestar atenção na igualdade lógica com igualdade de objeto de referencia. Espera que você esqueça o fato que a linha 4 não compila. Java não permite você comparar String e StringBuilder usando ==.
5. F. The question is trying to distract you into paying attention to logical equality versus object reference equality. It is hoping you will miss the fact that line 4 does not compile. Java does not allow you to compare String and StringBuilder using ==.6. F.
O código não compila porque duas instruções else não estão encadeados sem instruções if-then, então a resposta correta é a opção F. Opção E está incorreta, a linha 6 por si só não causa um problema, somente quando isso está emparelhada com a linha 7. Uma maneira de corrigir o código e compilar seria adicionar uma instrução if-then na linha 6. Outra solução seria remover a linha 7.
6. F. The code does not compile because two else statements cannot be chained together without additional if-then statements, so the correct answer is option F. Option E is incorrect as Line 6 by itself does not cause a problem, only when it is paired with Line 7. One way to fix this code so it compiles would be to add an if-then statement on line 6. The other solution would be to remove line 7.7. D.
Como você aprendeu na seção "Operador Ternário", embora os parênteses não serem exigidos, eles melhoram a leitura do código, como a seguinte declaração equivalente:
System.out.println((x > 2) ? ((x < 4) ? 10 : 8) : 7)
Aplicamos o operador ternário externo primeiro, pois é possível que a expressão interna pode nunca seja avaliada. Como (x > 2) é verdadeiro, isso reduz o problema para:
System.out.println((x < 4) ? 10 : 8)
Como x é maior que 2, a resposta é 8, ou a opção D neste caso.
7. D. As you learned in the section “Ternary Operator,” although parentheses are not required, they do greatly increase code readability, such as the following equivalent statement: System.out.println((x > 2) ? ((x < 4) ? 10 : 8) : 7) We apply the outside ternary operator first, as it is possible the inner ternary expression may never be evaluated. Since (x>2) is true, this reduces the problem to: System.out.println((x < 4) ? 10 : 8) Since x is greater than 2, the answer is 8, or option D in this case.8. B.
Este exemplo é complicado devido ao segundo operador de atribuição incorporado na linha 5. A expressão (z=false) atribui o valor false para z e retorna false para toda a expressão. Como y é diferente de 10, o lado esquerdo retorna true; no entanto o ou exclusivo (^) de toda expressão atribuída a x será true. A saída reflete essas atribuições, sem alteração para y, porém somente a opção B é a resposta correta. O código compila e executa sem problemas, portanto a opção F está incorreta.
8. B. This example is tricky because of the second assignment operator embedded in line 5. The expression (z=false) assigns the value false to z and returns false for the entire expression. Since y does not equal 10, the left-hand side returns true; therefore, the exclusive or (^) of the entire expression assigned to x is true. The output reflects these assignments, with no change to y, so option B is the only correct answer. The code compiles and runs without issue, so option F is not correct.9. F.
Neste exemplo, não há a declaração de atualização do loop for, pois a instrução é opcional, então a opção D está incorreta. A expressão dentro do loop incrementa i mas atribui o valor antigo de i por ser i++. Fazendo com que o i termine o loop com o mesmo valor que começa, com: 0. O loop irá repetir infinitamente, retornando a mesma instrução repetidamente porque i permanece com 0 após cada iteração do loop.
10. D.
A linha 4 gera uma possível perda de erro do compilador de precisão. O operador de fundição(cast) tem maior precedência, por isso é avaliado primeiro, convertendo a para byte. Em seguida, a adição é avaliada, promovendo a e b para valores int. O valor 90 é um int e não pode ser atribuído para a variável sum que está em bytes, sem uma conversão explícita, o código não irá compilar. O código poderia ser corrigido com parênteses em torno de (a+b), a opção C seria resposta correta.
10. D. Line 4 generates a possible loss of precision compiler error. The cast operator has the highest precedence, so it is evaluated first, casting a to a byte. Then, the addition is evaluated, causing both a and b to be promoted to int values. The value 90 is an int and cannot be assigned to the byte sum without an explicit cast, so the code does not compile. The code could be corrected with parentheses around (a + b), in which case option C would be the correct answer.11. A.
O asterisco(*) e a porcentagem(%) tem a mesma precedência, porém a expressão é avaliada da esquerda para a direita. O resultado de 5 * 4 é 20, e 20 % 3 é 2 (20 dividido por 3 é 18, o resto é 2). A saída é 2 e a opção A é a resposta correta.
11. A. The * and % have the same operator precedence, so the expression is evaluated from left-to-right. The result of 5 * 4 is 20, and 20 % 3 is 2 (20 divided by 3 is 18, the remainder is 2). The output is 2 and option A is the correct answer.12. D.
A variável x é int e s é uma referência de um objeto String. O dois tipos de dados são incomparáveis porque nenhuma variável pode ser convertida no tipo da outra variável. O erro do compilador ocorre na linha 5 quando a comparação é tentada, então a resposta é a opção D.
12. D. The variable x is an int and s is a reference to a String object. The two data types are incomparable because neither variable can be converted to the other variable’s type. The compiler error occurs on line 5 when the comparison is attempted, so the answer is option D.13. A.
O código compila com sucesso, então as opções C e D está incorretas. O valor de b depois da linha 4 é false. No entanto, a declaração if-then na linha 5 contém uma atribuição, não uma comparação. A variável b é atribuída como true na linha 3, e o operador de atribuição retorna true, então a linha 5 é executada e exibe Success, a resposta é a opção A.
13. A. The code compiles successfully, so options C and D are incorrect. The value of b after line 4 is false. However, the if-then statement on line 5 contains an assignment, not a comparison. The variable b is assigned true on line 3, and the assignment operator returns true, so line 5 executes and displays Success, so the answer is option A.14. C.
O código é compilado com sucesso, portanto a opção F está incorreta. Na linha 5, o pre-incremento é utilizado, onde c incrementa o valor de 7 para 8 e o novo valor é retornado na expressão. O valor de result é calculado pela adição do 4 original com o 8 da variável c já incrementada, resultando em um novo valor igual a 12, que é impresso na linha 6. Portanto, a opção C é a resposta correta.
15. E.
Isto é realmente um problema muito mais simples do que parece ser. A declaração while na linha 4 está sem parênteses, então o código não será compilado, e a opção E é a resposta correta. Se o parênteses forem adicionados, a opção F seria a resposta correta, pois o loop não usa chaves para incluir x++ e a expressão boleana nunca muda. Finalmente, se as chaves forem adicionadas ao redor de ambas expressões, a saída será 10, 6 e a opção B estaria correta.
15. E. This is actually a much simpler problem than it appears to be. The while statement on line 4 is missing parentheses, so the code will not compile, and option E is the correct answer. If the parentheses were added, though, option F would be the correct answer since the loop does not use curly braces to include x++ and the boolean expression never changes. Finally, if curly braces were added around both expressions, the output would be 10, 6 and option B would be correct.16. D.
A variável y é declarada dentro do corpo da instrução do-while, portanto está fora do escopo na linha 6. A linha 6 gera um erro do compilador, portanto, a opção D é a resposta correta.
16. D. The variable y is declared within the body of the do-while statement, so it is out of scope on line 6. Line 6 generates a compiler error, so option D is the correct answer.17. D.
O código compila sem erros, portanto a opção F está incorreta. Depois da primeira execução do loop, i é decrementado para 9 e o result para 13. Então i não é 8, keepGoing é false e o loop continua. Na próxima iteração, i é decrementado para 8 e o result para 11. Na segunda execução, i está igual a 8, portanto keepGoing é definido para false. Na conclusão do loop, o loop termina pois keepGoing não é mais true. O valor do result é 11, e a resposta correta é a opção D.
18. A.
A expressão da linha 5 é verdadeira quando row * col é um número par. Na primeira iteração, row = 1 e col = 1, porém a expressão na linha 6 é falsa, o continue é ignorado, e count é incrementado para 1. Na segunda iteração, row = 1 e col = 2, então a expressão da linha 6 é verdadeira e o continue termina o loop externo com o count ainda em 1. Na terceira iteração, row = 2 e col = 1, então a expressão na linha 6 é verdadeira e o continue termina o loop externo com o count ainda em 1. Na quarta iteração, row = 3 e col = 1, então a expressão na linha 6 é falsa e o continue termina o loop externo com count é incrementado para 2. Finalmente na quinta e final iteração, row = 3 e col = 2, então a expressão na linha 6 é verdadeira e o continue termina o loop externo ainda em 2. O resultado de 2 é exibido, portanto a resposta é a opção B.
18. A. The expression on line 5 is true when row * col is an even number. On the first iteration, row = 1 and col = 1, so the expression on line 6 is false, the continue is skipped, and count is incremented to 1. On the second iteration, row = 1 and col = 2, so the expression on line 6 is true and the continue ends the outer loop with count still at 1. On the third iteration, row = 2 and col = 1, so the expression on line 6 is true and the continue ends the outer loop with count still at 1. On the fourth iteration, row = 3 and col = 1, so the expression on line 6 is false, the continue is skipped, and count is incremented to 2. Finally, on the fifth and final iteration, row = 3 and col = 2, so the expression on line 6 is true and the continue ends the outer loop with count still at 2. The result of 2 is displayed, so the answer is option B.19. D.
Antes da primeira iteração, m = 9, n = 1 e x = 0. Depois da iteração do primeiro loop, m é atualizado para 8, n para 3, e x para a soma dos novos valores de m+n, 0 + 11 = 11. Depois da iteração do segundo loop, m é atualizado para 7, n para 5 e x para a soma dos novos valores de m + n, 11 + 12 = 23. Depois da iteração do terceiro loop, m é atualizado para 6, n para 7 e x para a soma dos novos valores de m + n, 23 + 13 = 36. Na quarta iteraçao do loop, m > n é avaliado como falso, como 6 < 7 não é verdade. O loop termina e o valor mais recente de x, 36 é exibido, portanto a resposta correta é a opção D.
19. D. Prior to the first iteration, m = 9, n = 1, and x = 0. After the iteration of the first loop, m is updated to 8, n to 3, and x to the sum of the new values for m + n, 0 + 11 = 11. After the iteration of the second loop, m is updated to 7, n to 5, and x to the sum of the new values for m + n, 11 + 12 = 23. After the iteration of the third loop, m is updated to 6, n to 7, and x to the sum of the new values for m + n, 23 + 13 = 36. On the fourth iteration of the loop, m > n evaluates to false, as 6 < 7 is not true. The loop ends and the most recent value of x, 36, is output, so the correct answer is option D.20. B.
O código compila e executa sem problemas, portanto as opções C, D e E não estão corretas. O valor de grade é 'B' e há uma declaração case correspondente que fará com que "great" seja impresso. Não há nenhuma declaração break após o case, no entanto, a próxima declaração case será alcançada, e "good" será impresso. Há um break após essa instrução case, no entanto a declaração switch terminará. A resposta correta é a opção B.
20. B. The code compiles and runs without issue, so options C, D, and E are not correct. The value of grade is 'B' and there is a matching case statement that will cause "great" to be printed. There is no break statement after the case, though, so the next case statement will be reached, and "good" will be printed. There is a break after this case statement, though, so the switch statement will end. The correct answer is thus option B.