Pular para o conteúdo principal

Questão de Programação — Programação Orientada a Objetos — FUNDATEC 2025

ProgramaçãoProgramação Orientada a Objetos
Código
qg472052
Banca
FUNDATEC
Órgão
GHC-RS
Ano
2025
Nível
Médio
Cargo
Programador
Qual alternativa apresenta o resultado da execução do seguinte programa, escrito em Java 1.8?package conceicao;public class Conceicao {public static void main(String[] args) {StringBuilder a = new StringBuilder("Hello world");StringBuilder b = new StringBuilder("Hello world");System.out.print((a == b?"S":"N") + " ");System.out.print((a.equals(b)?"S":"N") + " ");System.out.print((a.compareTo(b)?"S":"N") + " ");}}
  1. AN N N
  2. BN N S
  3. CN S S
  4. DS S S
  5. EApresenta erro de compilação.
Revelar gabarito e comentário

GabaritoE — Apresenta erro de compilação.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Programação Java – Sintaxe e Métodos de StringBuilder

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 == b

Compara 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.

SE LIGUE NESSA!

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.

Análise das alternativas

  • 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.

PEGA ESSA DICA!

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