| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/08/2008 22:59:17
|
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?????
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2008 08:42:51
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2008 12:14:10
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/08/2008 12:54:05
|
peczenyj
Moderador
![[Avatar]](/images/avatar/299dc35e747eb77177d9cea10a802da2.jpg)
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.' |
|
|
 |
|
|