converter tipo primitivo em object  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
ediel_xadrez
HelloWorld

Membro desde: 02/08/2008 22:29:15
Mensagens: 11
Offline


galera to com algumas duvidas levantadas pelo meu professor:

1)pq a jvm converte tipo primitivo em object, pq da conversão?

2)quais são as vantagen e desvantagens dessa conversão?

3) existe outra maneira de converter tipo primitivo em object além de casting?????



[Email] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

ediel_xadrez wrote:pq a jvm converte tipo primitivo em object, pq da conversão?

Porque as classes de coleções, o comando System.out.printf, várias classes do swing (models e componentes), entre outras coisas, só podem trabalhar com objects.
Então essa era uma operação muitíssimo comum.

2)quais são as vantagens e desvantagens dessa conversão?


As principais vantagens são:
1. Redução da sintaxe (boilerplate). Sem autoboxing, você teria que usar a lista assim:


A desvantagem é que fica menos óbvio que tipo de conversão o java estará fazendo. Vamos pegar um exemplo particularmente ruim (retirado do artigo: http://java.sun.com/developer/JDCTechTips/2005/tt0405.html), o equals. Considere a classe:



A operação (1) compara dois tipos primitivos.
A operação (2) compara dois números criados por autoboxing, usando ==
A operação (3) compara dois números criados por autoboxing, usando equals.

O resultado de executar esse comando é:
It is true that i ==j.
It is true that list.get(0) == list.get(1).
It is true that list.get(0).equals(list.get(1)).

Entretanto, se você alterar o valor de i e j para 2000, o resultado se torna:
It is true that i ==j.
It is false that list.get(0) == list.get(1).
It is true that list.get(0).equals(list.get(1)).

Isso porque a comparação de objetos com == só retorna true quando os dois objetos ocupam a mesma posição de memória. É o caso para todos os objetos criados por autoboxing e menores que 255, mas não é o caso do 2000, mostrado no exemplo. Via de regra, o ideal é tratar as listas sempre como se tivessem objetos dentro, a menos que vc tenha absoluta certeza de que a conversão será correta.

Outro problema é que, como ressaltado pela próprio sun nesse artigo, as conversões automáticas não são as de melhor performance. Então, evite usar auto-boxing sempre que você estiver dentro de um loop.

3) existe outra maneira de converter tipo primitivo em object além de casting?????
Sim, usando o construtor, o método value of das classes Wrapper e os métodos para obtenção dos tipos primitivos.

This message was edited 4 times. Last update was at 06/08/2008 07:43:31


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ediel_xadrez
HelloWorld

Membro desde: 02/08/2008 22:29:15
Mensagens: 11
Offline

AMIGO, TO COMEÇANDO AGORA COM JAVA
POR ISSO COLOQUEI O TOPICO EM JAVA BASICO

ENTENDI POUCO DE SUA RESPOSTA

VC PODERIA ME PASSAR SUA EXPLICAÇÃO NUM NIVEL MAIS BAIXO?
PLEASE
[Email] [MSN]
peczenyj
Moderador
[Avatar]

Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline

A resposta 1 depende do contexto: muitas operações só podem acontecer entre Objetos, logo se vc tem um primitivo ali no meio a jvm tem que converter.

A resposta 2 depende de conhecer a diferença entre == e o método equals, entre outras coisas.

A resposta 3 depende da versão do java.

$ cat A.java
class A{
static{
Double d = (Double) 10.0;
System.exit(0);
}
}

$ javac -source 1.4 A.java # nao funciona!
A.java:3: inconvertible types
found : double
required: java.lang.Double
Double d = (Double) 10.0;
^
1 error

$ javac -source 1.5 A.java # aqui funciona!

http://pacman.blog.br

'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.'
[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team