Ajuda para entender uma questão

7 respostas
S

Pessoal podem me ajudar na questão abaixo ?
Tinha entendido que, tudo o que roda no Java 5 tem que roda nas versões mais antigas do Java.
Com esse pensamento foi resolver a questão abaixo:

public class testeQuestao {
	
	public static void go(Short s){
		System.out.println("Utilizou SHORT ");
	}
	public static void go(Long l){
		System.out.println("Utilizou LONG ");
	}
	public static void go(int i){
		System.out.println("Utilizou int");
	}

	public static void main(String args[]){	
		short x = 7;
		long y  = 6;
	 	go(x);
	 	go(y);
		}

}

As opções:

a) O codigo não compila.
b) O codigo roda mas gera uma exceção em tempo de execução.
c) Utilizou SHORT Utilizou LONG
d) Utilizou int Utilizou LONG

Tipo com o pensamento que eu tinha logo de cara procurei pela resposta :
Utilizou int Utilizou int
e não tem !!!

Aew resolvi testar, se mudo o parametro do metodo go para:

go(7);

go(6);

Gera a saída:  Utilizou int Utilizou int
Alguem pode me explicar o porque que quando passo

go(x);

go(y);

Não gera a saida  Utilizou int Utilizou int  pois a resposta correta é  Utilizou int Utilizou LONG

Desde já agradeço !

7 Respostas

evertonsilvagomesjav

SemChance:
Pessoal podem me ajudar na questão abaixo ?
Tinha entendido que, tudo o que roda no Java 5 tem que roda nas versões mais antigas do Java.
Com esse pensamento foi resolver a questão abaixo:

public class testeQuestao {
	
	public static void go(Short s){
		System.out.println("Utilizou SHORT ");
	}
	public static void go(Long l){
		System.out.println("Utilizou LONG ");
	}
	public static void go(int i){
		System.out.println("Utilizou int");
	}

	public static void main(String args[]){	
		short x = 7;
		long y  = 6;
	 	go(x);
	 	go(y);
		}

}

As opções:

a) O codigo não compila.
b) O codigo roda mas gera uma exceção em tempo de execução.
c) Utilizou SHORT Utilizou LONG
d) Utilizou int Utilizou LONG

Tipo com o pensamento que eu tinha logo de cara procurei pela resposta :
Utilizou int Utilizou int
e não tem !!!

Aew resolvi testar, se mudo o parametro do metodo go para:

go(7);

go(6);

Gera a saída:  Utilizou int Utilizou int
Alguem pode me explicar o porque que quando passo

go(x);

go(y);

Não gera a saida  Utilizou int Utilizou int  pois a resposta correta é  Utilizou int Utilizou LONG

Desde já agradeço !

Bom tem uma pergunta dessas na pagina anterior vc podia dar uma olhada q la tema resposta mas…vamos lá.

vc tem que olhar NESTE CASO o que a JVM vai utilizar de meios mais faceis sendo assim: “ampliação” se nao tiver como fazer ela procura por “objetos wrappers (autoboxing)” e depois procura por varargs…

Sendo assim nesse caso quando vc passa um short para o método go() ele vai fazer uma ampliaçao para int, ao invez de fazer autoboxing para Short, e quando vc passa um long para o metodo go() ele vai fazer autoboxing para Long.

S

Entaum, para o JVM é mais facil fazer o AutoBoxing para Long e pq não é mais facil fazer o autoBoxing para o Short tb ?.

Se rodasse esse codigo em versões anteriores do Java 5 a resposta seria Utilizou int Utilizou int ?

Obrigado pelas respostas.

evertonsilvagomesjav

SemChance:
Entaum, para o JVM é mais facil fazer o AutoBoxing para Long e pq não é mais facil fazer o autoBoxing para o Short tb ?.

Se rodasse esse codigo em versões anteriores do Java 5 a resposta seria Utilizou int Utilizou int ?

Obrigado pelas respostas.

ela nao fez autoBoxing para Short porque tem um “int” como parametro, então um short “cabe” em um int por isso nao faz o autoBoxing.

S

Opa entendi … !
E ele faz o AutoBoxing para o Long, pois o long passado no metodo go() não cabe dentro do int.
Obrigado.

evertonsilvagomesjav

SemChance:
Opa entendi … !
E ele faz o AutoBoxing para o Long, pois o long passado no metodo go() não cabe dentro do int.
Obrigado.

isso ai!!

pmlm

Se assim fosse nunca haveria evolução.

yastorm

Tem que seguir a ordem:

Widening > Boxing > Var args

Criado 4 de maio de 2010
Ultima resposta 10 de mai. de 2010
Respostas 7
Participantes 4