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