Eficiencia

Tenho uma duvida sobre a eficiência de um certo problema que parecia ser bem simples.

Tinha feito uma prova de Java na faculdade e tinha um exercício q possuía somente a classe main onde havia a instancia de quatro objetos , cada uma com uma quantidades de parâmetros diferentes, todos inteiro. O exercício queria q fizéssemos o programar copilar corretamente.
Para isso faltava criar os construtores então eu criei quatro construtores fazendo a sobrecarga do método, porem meu prof deu errado na questão dizendo q apesar do programa copilar correto, o mais correto seria utilizar o vararg por ser mais eficiênte.
Agora a duvida é pq o vararg é mais eficiente que a sobrecarga de método?

Abaixo vou colocar um trecho do código, acho q da para entender.

public class TesteConstrutor {

	public TesteConstrutor() {}

	public TesteConstrutor(int a) {}

	public TesteConstrutor(int a, int b) {}

	public TesteConstrutor(int a, int b, int c) {}
}
public static void main(String[] args) {
		int n1 = 1;
		int n2 = 2;
		int n3 = 3;

		TesteConstrutor t1 = new TesteConstrutor();
		TesteConstrutor t2 = new TesteConstrutor(n1);
		TesteConstrutor t3 = new TesteConstrutor(n1, n2);
		TesteConstrutor t4 = new TesteConstrutor(n1, n2, n3);

}

Por favor, se alguém poder me explicar ficaria grato.

Valeu galera.

Primeiro, acho que o professor não pode te dar errado para essa questão. Se ele só pediu pra arrumar o código pra fazer compila-lo, ele não pode te dar errado pq vc fez isso de uma forma menos eficiente do que ele esperava. Se o enunciado tivesse “faça o código compilar e rodar da forma mais eficiente possível”, ai sim ele poderia dar errado.

Quanto a varargs ser mais eficiente, não posso dizer com absoluta certeza, mas acho que não. É claro que o código fica mais bonito e mais claro, mas mais performático acho que não. O problema no seu código é que se ele adicionasse mais uma chamada passando 4 argumentos, você dança com essa solução que vc deu, e com varargs funcionaria de boa.

Troque de facultade rapaz, é o melhor que você faz :smiley:

Bem, o que o professor define por eficiência?

Se eficiência é a velocidade de processamento do código, então teria que ver o resultado compilado dele, ou fazer um benchmark.
Se eficiência é clareza e manutenabilidade, então tenho que concordar com ele.

Teria que ver mesmo para que serve o código, pois escrever int… é mesma coisa de int[]. e não int, int, int.

Simplesmente a regra é clara, se o enunciado pedia que o código pudesse ser compilado, e dessa maneira que colocaste ele é, então pouco importa se até mesmo tivesses colocado comentários, loops (até infinitos que fosse), o código compila, ponto. Acho engraçado, me parece que uns professores nunca foram alunos. Deve ser algum trauma ou complexo que acomete vários professores.