Questão de certificação

5 respostas
_

E ai galera!!!

Seguinte, eu estava resolvendo uns simulados aqui e me deparewi com a seguinte questão:

[b]class B {

public static void main (String args[]) {

Long i1 = new Long(1);

Long i2 = new Long(i1);

System.out.print((i1==i2) + , + i1.equals(i2));

}}

What is the result of attempting to compile and run the program?

[/b]

Ao compilar e executar este código o resultado é “false, true” mas pela resolução que ele apresenta a resposta é compile-time error.
E então o que marcar na prova???

5 Respostas

J

Se a prova for de JSE 1.5 é: false,true

Se for JSE 1.4 é: compile-time error

porque não existe nenhum construtor assim:

public Long(Long value){
}

o que existe é:

public Long(long value){
}

e na versão 1.5 foi inserido um novo recurso chamado autoboxing onde um objeto de uma classe Wrapper (Long, Integer, Double, etc) é convertido automaticamente para seu tipo primitivo correspondente (e vice-versa), no caso long, seria como fazer:

long num;
Long numObj = new Long(10);

num = numObj;

Com JSE 1.5 isso aí funciona, com JSE 1.4 não compila!

Se você tiver Eclipse aí, muda a configuração dele pra 1.4 que você vai ver que dá erro!

_

Blz, valeu Jair Elton!!!

S

(i1==i2) => false pq ele vai olhar o objeto na memoria ?
i1.equals(i2) => true pq ele vai olhar o valor dos objetos ?

seria isso a explicação ?

J

quote => false pq ele vai olhar o objeto na memoria ?
i1.equals(i2) => true pq ele vai olhar o valor dos objetos ?[/quote]
Sim, no Java 1.5, porque no 1.4, como já foi dito, isso não compila!

S

vlw, nao compila por causa do constructor la ne

no 1.5 agora tem o autoboxing.
vlw

Criado 5 de julho de 2006
Ultima resposta 11 de jul. de 2006
Respostas 5
Participantes 3