Teste pra galera

Qual a saída deste cod:

[code]package com.testeWrapper;

public class MetosWrapper {

static String s = " ";

public static void main(String[] args) {
	
	int x=4; Boolean y = true; short[]sa = {1,2,3};
	
	doStuff(x,y); 
	
	doStuff(x);
	
	doStuff(sa, sa);
	
	System.out.println(s);

}

static void doStuff(Object o){
	s += "1";
}

static void doStuff(Object...o){
	s += "2";
}

static void doStuff(Integer...i){
	s += "3";
}

static void doStuff(Long L){
	s += "4";
}

}
[/code]

212 ?? :stuck_out_tongue:

kkk e sim, mas vc compilou? Ai nao vale rs :stuck_out_tongue: tem que explicar ai pq uai eheh.

Na verdade o que confunde um pouco é aquele método com Long…Mas nestes
métodos será feito o boxing de primitivo para wrapper e a ampliação para Object ou
var-arg de Object… :slight_smile:

rsrs é isso ai, mas e bom lembrar que a variavel “x” int, poderia chamar o metodo para fazer o boxing para Integer, mas no caso ele não o faz por causa do varargs que em java não tem prioridade, masss é isso ai!!!

212…

Essa questão e bem interessante : Temos uma ordem para escolher qual método usar:

  1. primeiro tentamos fazer a ampliação ou seja, se temos tipos primitivos podemos colocar um byte dentro de um int e assim por diante, Byte -> short -> int -> long

  2. Autoboxing é feito quando transformando um int em um Integer , como Integer extens Object ele tambem pode ser um objeto, caso não tenha um int podemos usar um metodo que use Object

  3. A ultima opção e var array.

É so pensar na ordem que apareceu no java , primeiro a ampliação, depois os wrappes e por ultimo o var array.

Cuidado algumas conversões não são possiveis como:


byte b=5;

go(b);

static void go(Long x){}

Não é válido pois precisamos fazer um ampliação depois um auto-boxing
Tambem não e válido ampliar Wraper


Byte b=5;

go(b);

static void go(Long x){}

Bem vou ficando por ai…flw