Java Quiz

Cinquenta e quatro perguntas sobre o que você estudou no guia, divididas nos três níveis. A maioria mostra um trecho de código e pergunta o que ele imprime: tente responder de cabeça, sem rodar. Cada resposta foi conferida num JDK 25 de verdade. A correção é na hora; abra "Explicação" para entender o porquê, e o link "Revise" leva à aula do assunto.

Acertos: 0 de 54

Como os trechos funcionam

Para economizar espaço, os trechos mostram só o essencial: imagine-os dentro de um main, com os import necessários (java.util.*, java.util.stream.*, java.util.function.*, java.math.BigDecimal, java.time.LocalDate). Classes, records e enums dos exemplos ficam fora do main, como em qualquer programa.

Ir para: Nível 1 · Nível 2 · Nível 3

Nível 1 · Iniciante

1. O que este código imprime?

System.out.println(10 / 3);
Explicação

Entre dois int, a divisão é inteira: a parte decimal é descartada (não arredonda).

Revise: Operadores Aritméticos

2. O que este código imprime?

System.out.println(10 % 3);
Explicação

% é o resto da divisão: 10 = 3 × 3 + 1.

Revise: Operadores Aritméticos

3. O que este código imprime?

System.out.println(1 + 2 + "3" + 4 + 5);
Explicação

Da esquerda para a direita: 1 + 2 = 3 (números); 3 + "3" = "33" (vira texto); daí em diante tudo é concatenação: "3345".

Revise: Concatenação

4. O que este código imprime?

int x = 5;
x += 3 * 2;
System.out.println(x);
Explicação

x += 3 * 2 é x = x + (3 * 2): a multiplicação vem primeiro. 5 + 6 = 11.

Revise: Operadores de Atribuição

5. O que este código imprime?

char c = 'A';
c++;
System.out.println(c);
Explicação

Um char é um número (o código Unicode). 'A' é 65; mais 1 dá 66, que é 'B'. Como a variável é char, imprime a letra.

Revise: char e boolean

6. O que este código imprime?

System.out.println(0.1 + 0.2);
Explicação

O double guarda os números em binário, e 0,1 e 0,2 não têm representação exata. Para dinheiro, use BigDecimal.

Revise: double e float

7. O que este código imprime?

int i = Integer.MAX_VALUE;
i++;
System.out.println(i);
Explicação

Overflow: passar do maior int "dá a volta" para o menor, sem erro nenhum.

Revise: int, long, short, byte

8. O que este código imprime?

for (int i = 0; i < 3; i++) {
    System.out.print(i + " ");
}
Explicação

Começa em 0 e repete enquanto i < 3: 0, 1 e 2.

Revise: for

9. O que este código imprime?

String s = "Java";
System.out.println(s.length() + s.charAt(0));
Explicação

Pegadinha: length() é int e charAt(0) é char. int + char é uma conta: 4 + 74 (o código de 'J') = 78. Para juntar como texto, comece com uma String: "" + 4 + 'J'.

Revise: char e boolean

10. O que este código imprime?

int dia = 7;
String t = switch (dia) {
    case 1, 7 -> "fim de semana";
    default -> "dia útil";
};
System.out.println(t);
Explicação

case 1, 7 junta dois valores. Com setas, não existe "cair" no próximo caso, então não precisa de break.

Revise: switch com Setas

11. Quanto vale b?

boolean b = 5 > 3 && 2 > 4 || true;
Explicação

&& é feito antes de ||: (true && false) || true = false || true = true.

Revise: Precedência

12. O que este código imprime?

double d = 7 / 2;
System.out.println(d);
Explicação

7 / 2 é calculado entre dois int (dá 3) antes de ir para o double, que só acrescenta o .0. Para 3.5: 7.0 / 2.

Revise: Conversão de Tipos

13. Na máquina da Ana (sistema em português do Brasil), o que isto imprime?

System.out.printf("%.2f%n", 3.14159);
Explicação

printf e String.format usam o idioma do sistema: em pt_BR, vírgula decimal. Já o println de um double sempre usa ponto.

Revise: Formatar Texto

14. O que este código imprime?

int[] v = {4, 8, 15};
int soma = 0;
for (int x : v) soma += x;
System.out.println(soma / v.length);
Explicação

A soma é 27 e v.length é 3. 27 / 3 = 9, divisão inteira.

Revise: for-each

15. O que este código imprime?

int i = 0;
while (i < 10) {
    i += 4;
}
System.out.println(i);
Explicação

i vale 0, 4, 8 e 12. Com 12 a condição i < 10 fica falsa e o laço para.

Revise: while e do-while

16. O que o javac produz a partir de Ola.java?

Explicação

O compilador gera bytecode, que roda em qualquer sistema com uma JVM.

Revise: javac e java

17. Qual destas versões do Java é LTS (suporte longo) e é a ensinada neste guia?

Explicação

As LTS recentes são 8, 11, 17, 21 e 25.

Revise: Versões e LTS

Nível 2 · Intermediário

18. O que este código imprime?

String a = "oi";
String b = new String("oi");
System.out.println(a == b);
System.out.println(a.equals(b));
Explicação

== compara se é o mesmo objeto; equals compara o conteúdo. new String cria outro objeto.

Revise: Strings

19. O que f(5) imprime?

static void f(int x)    { System.out.println("int"); }
static void f(double x) { System.out.println("double"); }
Explicação

Sobrecarga: o Java escolhe a versão que combina exatamente com o argumento. 5 é int.

Revise: Sobrecarga

20. O que este código imprime?

class Animal { String som() { return "..."; } }
class Gato extends Animal {
    @Override String som() { return "Miau"; }
}

Animal a = new Gato();
System.out.println(a.som());
Explicação

Polimorfismo: a variável é do tipo Animal, mas o objeto é um Gato, e é o método do objeto que roda.

Revise: Polimorfismo

21. O que imprime depois de três new Contador()?

class Contador {
    static int total = 0;
    Contador() { total++; }
}

new Contador(); new Contador(); new Contador();
System.out.println(Contador.total);
Explicação

Um atributo static é um só para a classe inteira: os três objetos somam no mesmo total.

Revise: static

22. O que este código imprime?

try {
    System.out.println("A");
    int x = 1 / 0;
    System.out.println("B");
} catch (ArithmeticException e) {
    System.out.println("C");
} finally {
    System.out.println("D");
}
Explicação

A divisão por zero pula o resto do try (o B não aparece), vai para o catch e, no fim, o finally roda sempre.

Revise: finally

23. O que este código imprime?

record Ponto(int x, int y) { }
System.out.println(new Ponto(1, 2));
Explicação

Records ganham um toString pronto, no formato Nome[componente=valor, …].

Revise: Records

24. Com o mesmo record, quanto vale new Ponto(1, 2).equals(new Ponto(1, 2))?

Explicação

Records comparam pelo conteúdo: mesmos componentes, objetos iguais.

Revise: Records

25. O que imprime?

enum Dia { SEG, TER, QUA }
System.out.println(Dia.TER.ordinal());
Explicação

ordinal() é a posição da constante, começando em 0: SEG é 0, TER é 1.

Revise: Enums

26. O que imprime?

StringBuilder sb = new StringBuilder("abc");
sb.reverse();
sb.append("!");
System.out.println(sb);
Explicação

Ao contrário da String, o StringBuilder muda: reverse inverte o próprio texto e append acrescenta no fim.

Revise: StringBuilder

27. O que imprime?

Integer a = 127, b = 127;
System.out.println(a == b);
Integer c = 128, d = 128;
System.out.println(c == d);
Explicação

O Java reaproveita os objetos Integer de -128 a 127, então a e b são o mesmo objeto; 128 cria objetos diferentes. Moral: compare wrappers com equals.

Revise: Wrappers e Autoboxing

28. O que new B() imprime?

class A { A() { System.out.print("A"); } }
class B extends A { B() { System.out.print("B"); } }
Explicação

Todo construtor começa chamando o da mãe (um super() invisível). Primeiro roda o de A, depois o de B.

Revise: super

29. Quanto vale fat(5)?

static int fat(int n) { return n <= 1 ? 1 : n * fat(n - 1); }
Explicação

Recursão com caso base (n <= 1): 5 × 4 × 3 × 2 × 1 = 120.

Revise: Recursão

30. O que imprime?

System.out.println(new BigDecimal("0.1").add(new BigDecimal("0.2")));
Explicação

BigDecimal criado a partir de texto faz contas decimais exatas.

Revise: BigDecimal e Dinheiro

31. O que imprime?

System.out.println(LocalDate.of(2026, 10, 16).plusDays(20));
Explicação

plusDays sabe que outubro tem 31 dias: 16 + 20 = 5 de novembro. O toString de LocalDate usa o formato ISO, ano-mês-dia.

Revise: Datas e Horas

32. O que imprime?

String nome = "Ana";
nome.toUpperCase();
System.out.println(nome);
Explicação

String é imutável: toUpperCase() devolve uma String nova, que foi jogada fora. Seria preciso nome = nome.toUpperCase();.

Revise: Strings

33. Qual destas exceções o compilador obriga a tratar ou declarar?

Explicação

IOException é checked; as outras são filhas de RuntimeException (unchecked).

Revise: Checked × Unchecked

34. Qual modificador deixa um atributo visível só dentro da própria classe?

Explicação

É a base do encapsulamento: dados private, acesso por métodos.

Revise: Modificadores de Acesso

Nível 3 · Avançado

35. O que imprime?

System.out.println(new HashSet<>(List.of("a", "b", "a")).size());
Explicação

Um Set não guarda repetidos: sobram "a" e "b".

Revise: HashSet

36. O que imprime?

System.out.println(new TreeMap<>(Map.of("b", 2, "a", 1, "c", 3)));
Explicação

O TreeMap mantém as chaves em ordem.

Revise: TreeMap e TreeSet

37. O que imprime?

System.out.println(List.of(1, 2, 3, 4, 5).stream()
        .filter(n -> n % 2 == 1)
        .map(n -> n * n)
        .toList());
Explicação

filter deixa os ímpares (1, 3, 5) e map eleva ao quadrado.

Revise: Streams

38. O que imprime?

System.out.println(IntStream.rangeClosed(1, 4).sum());
Explicação

rangeClosed(1, 4) inclui o 4: 1 + 2 + 3 + 4 = 10. (range(1, 4) pararia no 3.)

Revise: Streams

39. O que imprime?

System.out.println(Stream.of("ana", "bia", "caio").collect(Collectors.groupingBy(String::length)));
Explicação

groupingBy monta um Map da chave (o tamanho) para a lista dos itens com aquela chave.

Revise: Collectors

40. O que imprime?

System.out.println(Optional.empty().orElse("nada"));
Explicação

orElse dá o valor padrão quando o Optional está vazio. Quem lança exceção é o get().

Revise: Optional

41. O que imprime?

Function<Integer, Integer> dobro = x -> x * 2;
System.out.println(dobro.andThen(x -> x + 1).apply(5));
Explicação

andThen aplica primeiro o dobro (5 × 2 = 10) e depois a segunda função (10 + 1).

Revise: Interfaces Funcionais

42. O que imprime?

System.out.println(Stream.of("b", "a", "c")
        .sorted()
        .map(String::toUpperCase)
        .collect(Collectors.joining(",")));
Explicação

sorted ordena, String::toUpperCase é uma referência de método e joining(",") junta com vírgulas.

Revise: Referências de Métodos

43. O que descreve(new Circulo(20)) devolve?

sealed interface Forma permits Circulo, Quadrado { }
record Circulo(double r) implements Forma { }
record Quadrado(double l) implements Forma { }

static String descreve(Forma f) {
    return switch (f) {
        case Circulo c when c.r() > 10 -> "círculo grande";
        case Circulo c -> "círculo";
        case Quadrado q -> "quadrado " + q.l();
    };
}
Explicação

O primeiro case que casa ganha; a guarda when exige raio maior que 10. E não precisa de default: a interface é selada, e o compilador sabe que os dois tipos foram cobertos.

Revise: Pattern Matching

44. Como fica a lista depois deste sort?

List<String> l = new ArrayList<>(List.of("kiwi", "uva", "banana", "caju"));
l.sort(Comparator.comparing(String::length)
        .thenComparing(Comparator.naturalOrder()));
Explicação

Primeiro pelo tamanho (uva tem 3, caju e kiwi têm 4, banana 6); no empate, ordem alfabética: caju antes de kiwi.

Revise: Comparable e Comparator

45. O que imprime?

System.out.println("a1b22c333".replaceAll("[0-9]+", "#"));
Explicação

[0-9]+ casa com "um ou mais dígitos seguidos", então cada grupo de dígitos vira um único #.

Revise: Expressões Regulares

46. O que imprime?

Map<String, Integer> m = new HashMap<>();
for (String p : "o rato roeu o rato".split(" ")) {
    m.merge(p, 1, Integer::sum);
}
System.out.println(new TreeMap<>(m));
Explicação

merge põe 1 na primeira vez e soma 1 nas seguintes: a contagem de palavras clássica. O TreeMap mostra em ordem.

Revise: HashMap

47. O que imprime?

List<Integer> l = new ArrayList<>(List.of(1, 2, 3, 4));
l.removeIf(n -> n % 2 == 0);
System.out.println(l);
Explicação

removeIf remove com segurança todos que cumprem a condição (os pares). Remover dentro de um for-each é que daria ConcurrentModificationException.

Revise: ArrayList

48. O que imprime?

Deque<Integer> p = new ArrayDeque<>();
p.push(1); p.push(2); p.push(3);
System.out.println(p.pop() + " " + p.peek());
Explicação

Pilha: o último que entrou sai primeiro. pop tira o 3; peek olha o novo topo, 2.

Revise: Cola de Coleções

49. O que imprime?

Object o = 42;
if (o instanceof Integer n && n > 40) {
    System.out.println("grande: " + (n + 1));
}
Explicação

O instanceof com padrão testa o tipo e já cria a variável n, que pode ser usada no resto da condição.

Revise: Pattern Matching

50. O que imprime?

System.out.println(Stream.iterate(1, x -> x * 3).limit(4).map(String::valueOf).collect(Collectors.joining(" ")));
Explicação

iterate gera 1, 3, 9, 27… sem fim; limit(4) corta nos quatro primeiros.

Revise: Streams

51. Qual comando do Maven compila e roda os testes do projeto?

Explicação

mvn test passa por compile, test-compile e test; mvn package faz isso e ainda gera o JAR.

Revise: Maven

52. Em assertEquals(a, b) do JUnit, qual é a ordem certa?

Explicação

Primeiro o esperado. Invertido, o teste ainda funciona, mas o relatório de falha (expected: … but was: …) mostra os valores trocados.

Revise: Testes com JUnit

53. Por que List<int> não compila?

Explicação

O javac responde unexpected type, required: reference, found: int. O autoboxing converte entre int e Integer sozinho.

Revise: Erros do Compilador

54. Desde qual versão as threads virtuais fazem parte do Java (sem flag de preview)?

Explicação

Threads virtuais chegaram no Java 21 (LTS).

Revise: Threads Virtuais


Duvidou de uma resposta? Rode!

Não acredite em ninguém, nem neste quiz: rode o código. Cole um trecho dentro do main abaixo, ou use o JShell.

Caixa livre: já está aqui a pergunta do s.length() + s.charAt(0). Troque por "" + s.length() + s.charAt(0) e veja a diferença.

public class Main {
    public static void main(String[] args) {
        String s = "Java";
        System.out.println(s.length() + s.charAt(0));
    }
}

No JShell: confira a pergunta dos Integer: digite Integer a = 127, b = 127, depois a == b; e Integer c = 128, d = 128, depois c == d.

Integer a = 127, b = 127
a == b
Integer c = 128, d = 128
c == d
Terminou?

Role até o topo para ver o placar. Errou alguma? A explicação e o link "Revise" levam direto ao assunto. Para consultar rápido, use a Referência e o Glossário.