Questão de Programação — Programação Orientada a Objetos — FUNDATEC 2025
- Código
- qg472052
- Banca
- FUNDATEC
- Órgão
- GHC-RS
- Ano
- 2025
- Nível
- Médio
- Cargo
- Programador
- AN N N
- BN N S
- CN S S
- DS S S
- EApresenta erro de compilação.
GabaritoE — Apresenta erro de compilação.
Gabarito: letra E. O programa apresenta erro de compilação porque a expressão (a.compareTo(b)?"S":"N") é inválida: o método compareTo retorna int, mas o operador ternário exige uma condição do tipo boolean. Em Java, int não é convertido automaticamente para boolean, ao contrário de linguagens como C/C++. Além disso, as duas primeiras comparações (== e equals) resultariam em false, mas o código sequer compila.
Vamos detalhar cada expressão:
a == bCompara referências de objetos. a e b são dois objetos StringBuilder distintos (criados com new), portanto a expressão é false → imprime "N".
a.equals(b)A classe StringBuilder não sobrescreve o método equals herdado de Object. O equals de Object também compara referências, então retorna false → imprime "N". (Diferente de String, que sobrescreve equals para comparar conteúdo.)
a.compareTo(b)O método compareTo da classe StringBuilder é definido na interface Comparable e retorna um valor int (0, negativo ou positivo). A tentativa de usar esse int como condição no operador ternário é ilegal em Java — a condição deve ser uma expressão boolean. Por isso, o compilador gera um erro.
Em Java, diferentemente de C, inteiros não são tratados como valores booleanos. Apenas expressões do tipo boolean (true/false) podem ser usadas em comandos if, while e no operador ternário.
A) N N N — Incorreta. O programa não produz saída porque não compila.
B) N N S — Incorreta. Além de não compilar, compareTo não retorna boolean.
C) N S S — Incorreta. equals não retorna true (StringBuilder não sobrescreve equals).
D) S S S — Incorreta. Todas as comparações seriam falsas, e ainda há erro de compilação.
E) Apresenta erro de compilação. ✅ Correta. Como explicado, o código não compila devido ao uso inválido do int no operador ternário.
Em Java, memorize que:
== compara referências (não conteúdo) para objetos.
equals() só compara conteúdo se a classe sobrescrever o método (ex.: String, Integer). StringBuilder não sobrescreve.
compareTo() retorna int, nunca boolean.
O operador ternário (cond ? val : val) exige cond do tipo boolean.
Gabarito: letra E — erro de compilação.
Link permanente: /questoes/qg472052