Questão de Programação — Java — Quadrix 2025
- Código
- qg595092
- Banca
- Quadrix
- Órgão
- CFO
- Ano
- 2025
- Nível
- Médio
- Cargo
- Técnico em Tecnologia da Informação
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: ERRADO. Em Java, os tipos primitivos são passados por valor — o método recebe uma cópia do valor, e alterações dentro do método não afetam a variável original. A passagem por referência (onde mudanças afetam o original) ocorre com objetos e arrays, que são tipos de referência. A afirmação inverte exatamente esses dois conceitos.
Vamos entender o que isso significa na prática. Quando você chama um método passando uma variável primitiva (como int, double, boolean), o Java copia o valor dessa variável para o parâmetro do método. Dentro do método, você pode modificar esse parâmetro à vontade, mas a variável original do chamador permanece intacta. Isso é a essência da passagem por valor.
Por outro lado, quando você passa um objeto ou um array para um método, o que é copiado é a referência (o endereço de memória) para o objeto, não o objeto em si. Assim, se o método modificar o conteúdo do objeto (por exemplo, alterar um elemento de um array), essa mudança será refletida na variável original, pois ambas apontam para o mesmo local na memória. É por isso que dizemos que objetos são passados por referência (embora tecnicamente seja uma passagem por valor da referência).
A tabela abaixo resume a diferença crucial:
Critério | Passagem por valor | Passagem por referência |
|---|---|---|
O que é copiado | O valor da variável | A referência (endereço) do objeto |
Afeta a variável original? | Não | Sim (se o conteúdo do objeto for alterado) |
Tipos em Java | Primitivos ( | Objetos e arrays |
Exemplo |
|
|
A pegadinha da banca é justamente inverter esses conceitos. Ela afirma que primitivos são passados por referência, quando na verdade são passados por valor. O candidato que confunde os dois conceitos cai na armadilha.
Para fixar, veja um exemplo concreto:
public class Teste {
public static void main(String[] args) {
int numero = 10;
alterarPrimitivo(numero);
System.out.println(numero); // Imprime 10, pois a alteração não afetou o original
int[] vetor = {1, 2, 3};
alterarArray(vetor);
System.out.println(vetor[0]); // Imprime 99, pois a alteração afetou o original
}
static void alterarPrimitivo(int valor) {
valor = 99; // Altera apenas a cópia
}
static void alterarArray(int[] arr) {
arr[0] = 99; // Altera o conteúdo do objeto referenciado
}
}No primeiro caso, numero continua 10. No segundo, vetor[0] vira 99. Isso demonstra claramente a diferença.
Guarde essa fronteira: primitivo = por valor; objeto/array = por referência. É exatamente nela que esta questão se decide.
A afirmação está errada porque inverte o mecanismo de passagem de parâmetros em Java. Os tipos primitivos são passados por valor, ou seja, uma cópia do valor é enviada ao método, e alterações feitas dentro dele não afetam a variável original. A passagem por referência, onde mudanças afetam o original, é característica de objetos e arrays, que são tipos de referência. Portanto, a frase "os tipos de dados primitivos são passados por referência" é falsa.
Gabarito: ERRADO
Link permanente: /questoes/qg595092