RE: [java-list] Java: Passagem por valor ou referencia?
Veja bem: Na Stack ficam os ponteiros que apontam para os objetos que estão na "heap". Não é que Java não tenha ponteiros, o lance é que vc não pode ter acesso a eles. --- [EMAIL PROTECTED] escreveu: > Pessoal, > > Eu acho um pouco falacioso chamar de "passagem por > referência" esse tipo de > coisa. Como Java não tem ponteiros, não podemos > acessar o conteúdo das > referências utilizadas como fazíamos em C. Assim, > quando passamos um objeto > como parâmetro, estamos passando na verdade a > referência ao objeto, e é > passado uma cópia dessa referência. Se a passagem > fosse por referência, não > haveria essa cópia. Tudo bem que aí teremos duas > referências para o mesmo > objeto, mas enfim, a passagem é por valor. > > Apenas para citar uma referência, um livro de > certificação bastante > utilizado, "COMPLETE JAVA 2 CERTIFICATION STUDY > GUIDE", do Simon Roberts, > Phillip Heller e Ernest Michael tem um capítulo que > fala sobre isso. Eles > afirmam categoricamente: Não existe passagem por > referência em Java. Somente > por valor. > > No stress, > > Abraços, > Denard > ___ Yahoo! GeoCities Tenha seu lugar na Web. Construa hoje mesmo sua home page no Yahoo! GeoCities. É fácil e grátis! http://br.geocities.yahoo.com/ -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -
RE: [java-list] Java: Passagem por valor ou referencia?
Title: RE: [java-list] Java: Passagem por valor ou referencia? Pessoal, Eu acho um pouco falacioso chamar de "passagem por referência" esse tipo de coisa. Como Java não tem ponteiros, não podemos acessar o conteúdo das referências utilizadas como fazíamos em C. Assim, quando passamos um objeto como parâmetro, estamos passando na verdade a referência ao objeto, e é passado uma cópia dessa referência. Se a passagem fosse por referência, não haveria essa cópia. Tudo bem que aí teremos duas referências para o mesmo objeto, mas enfim, a passagem é por valor. Apenas para citar uma referência, um livro de certificação bastante utilizado, "COMPLETE JAVA 2 CERTIFICATION STUDY GUIDE", do Simon Roberts, Phillip Heller e Ernest Michael tem um capítulo que fala sobre isso. Eles afirmam categoricamente: Não existe passagem por referência em Java. Somente por valor. No stress, Abraços, Denard -Original Message- From: Alysson Neves Bessani [mailto:[EMAIL PROTECTED]] Sent: quarta-feira, 3 de outubro de 2001 16:18 To: [EMAIL PROTECTED] Subject: [java-list] Java: Passagem por valor ou referencia? Bom, aqui acho q cabe uma esclarecida: Os tipos basicos em java sao passados por valor. Assim quando um tipo basico eh passado por parametro ele eh COPIADO para dentro do metodo q vai ser executado. Os objetos, como nao sao manipulados diretamente na pilha da maquina virtual sao passados sempre por "referencia". Isto porque a pilha trata referencias a objetos, e uma vez essas passadas como parametro, elas (as referencias) sao COPIADAS pra dentro do metodo. Assim a referencia copiada continua "apontando" pro objeto antigo e qualquer alteracao neste eh valida dentro e fora do metodo. Abracos. On Wed, 3 Oct 2001 [EMAIL PROTECTED] wrote: > Sérgio, > > Eu gostaria de fazer uma pequena correção no seu email. > > Java não possui passagem por referência. Somente por valor. Existe uma forma > de "simular" passagem de parâmetros por referência, utilizando os objetos ou > tipos primitivos armazenados em um array, por exemplo. Mas não existe > passagem por referência. > > Antes que o alguém dê pulinhos de alegria, eu pergunto: e qual é o problema? > Alguém por favor, apresente um artigo demonstrativo, baseado em testes de > performance ou de algum requisito que mostre qual é o grandisíssimo problema > de Java utilizar passagem por valor, e não por referência? Mesmo que haja, > isso significa que Java é ruim? > > Abraços, > Denard > > -Original Message- > From: Sergio Oliveira Jr. [mailto:[EMAIL PROTECTED]] > Sent: terça-feira, 2 de outubro de 2001 22:56 > To: [EMAIL PROTECTED] > Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED] > Subject: [java-list] Re: Artigo Java x C# > > Mauro, > > Não era a minha intensão te tirar do sério. Não vejo problema algum em me > engajar num papo com você face-to-face. Só estou conversando com você via > email por ser mais conveniente, afinal a tecnologia está aí para facilitar a > > nossa vida, certo? > > Vou continuar falando racionalmente, apesar de não ver nenhum problema em te > > encontrar para um papo mais descontraído. > > Alguns absurdos que vc escreveu: > > - Java não possui todos os tipos derivados de ancestral comum: > > Possui sim... Além de possuir tipos primitivos mais leves, que por sua vez > possuem suas classes equivalentes (Wrappers). Todas são derivadas da class > Object. > > - Java não possui Structs: > > Realmente não possui a palavra Structs, mas é ridículo simular um C Struct > com uma class ou inner class. > > - Java não pode passar parametros por referencia: > > Todos os objetos Java são passados por referencia. Qualquer principiante em > Java precisa saber disso. > > - Java não possui Propriedades: > > Já ouviu falar em JavaBeans ??? Tb existe uma classe Properties que faz isso > > facilmente. > > - Java categoricamente não possui eventos nem delegate: > > Toda a GUI do Java é orientada a eventos e a listeners. > Java não possui ponteiros para funções, mas possui interfaces que podem > facilmente e de uma forma mais elegante e poderosa realizar callbacks. > > - Java não possui Atributos: > > Não sei o que vc quiz dizer com isso, mas Java possui uma API de Reflection > poderosíssima. > > - Java não possui Ponteiros: > > Ainda bem! Referencia = Ponteiro com a excessão que não podemos fazer > operações aritiméticas com referencias. > Todo mundo sabe que os ponteiros sempre foram a maior fonte de bugs, falhas > de segurança, vírus e dores de cabeça para os programadores C. > > - Java não possui Forech: loop para varrer arrays e coleções > > Dê uma olhada na API Collections. Vc vai ficar impressionado com a >
[java-list] Java: Passagem por valor ou referencia?
Bom, aqui acho q cabe uma esclarecida: Os tipos basicos em java sao passados por valor. Assim quando um tipo basico eh passado por parametro ele eh COPIADO para dentro do metodo q vai ser executado. Os objetos, como nao sao manipulados diretamente na pilha da maquina virtual sao passados sempre por "referencia". Isto porque a pilha trata referencias a objetos, e uma vez essas passadas como parametro, elas (as referencias) sao COPIADAS pra dentro do metodo. Assim a referencia copiada continua "apontando" pro objeto antigo e qualquer alteracao neste eh valida dentro e fora do metodo. Abracos. On Wed, 3 Oct 2001 [EMAIL PROTECTED] wrote: > Sérgio, > > Eu gostaria de fazer uma pequena correção no seu email. > > Java não possui passagem por referência. Somente por valor. Existe uma forma > de "simular" passagem de parâmetros por referência, utilizando os objetos ou > tipos primitivos armazenados em um array, por exemplo. Mas não existe > passagem por referência. > > Antes que o alguém dê pulinhos de alegria, eu pergunto: e qual é o problema? > Alguém por favor, apresente um artigo demonstrativo, baseado em testes de > performance ou de algum requisito que mostre qual é o grandisíssimo problema > de Java utilizar passagem por valor, e não por referência? Mesmo que haja, > isso significa que Java é ruim? > > Abraços, > Denard > > -Original Message- > From: Sergio Oliveira Jr. [mailto:[EMAIL PROTECTED]] > Sent: terça-feira, 2 de outubro de 2001 22:56 > To: [EMAIL PROTECTED] > Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED] > Subject: [java-list] Re: Artigo Java x C# > > Mauro, > > Não era a minha intensão te tirar do sério. Não vejo problema algum em me > engajar num papo com você face-to-face. Só estou conversando com você via > email por ser mais conveniente, afinal a tecnologia está aí para facilitar a > > nossa vida, certo? > > Vou continuar falando racionalmente, apesar de não ver nenhum problema em te > > encontrar para um papo mais descontraído. > > Alguns absurdos que vc escreveu: > > - Java não possui todos os tipos derivados de ancestral comum: > > Possui sim... Além de possuir tipos primitivos mais leves, que por sua vez > possuem suas classes equivalentes (Wrappers). Todas são derivadas da class > Object. > > - Java não possui Structs: > > Realmente não possui a palavra Structs, mas é ridículo simular um C Struct > com uma class ou inner class. > > - Java não pode passar parametros por referencia: > > Todos os objetos Java são passados por referencia. Qualquer principiante em > Java precisa saber disso. > > - Java não possui Propriedades: > > Já ouviu falar em JavaBeans ??? Tb existe uma classe Properties que faz isso > > facilmente. > > - Java categoricamente não possui eventos nem delegate: > > Toda a GUI do Java é orientada a eventos e a listeners. > Java não possui ponteiros para funções, mas possui interfaces que podem > facilmente e de uma forma mais elegante e poderosa realizar callbacks. > > - Java não possui Atributos: > > Não sei o que vc quiz dizer com isso, mas Java possui uma API de Reflection > poderosíssima. > > - Java não possui Ponteiros: > > Ainda bem! Referencia = Ponteiro com a excessão que não podemos fazer > operações aritiméticas com referencias. > Todo mundo sabe que os ponteiros sempre foram a maior fonte de bugs, falhas > de segurança, vírus e dores de cabeça para os programadores C. > > - Java não possui Forech: loop para varrer arrays e coleções > > Dê uma olhada na API Collections. Vc vai ficar impressionado com a > qualidade, eficiência e performance dessa API. > > - Java não possui Campos readonly. > > Lógico que possui. Basta utilizar final. > > - Java não possui Documentação integrada em XML. > > Javadoc serve exatamente para isso que vc sugere como vantagem do C#. > > - Java não possui Controle sobre "estouro de faixa" numérica > > Lógico que possui. Pelo amor de Deus... > > - Java não possui Diretivas de compilação condicional (#ifdef etc) > > Não precisa pois utilizando o final boolean DEBUG = false; o compilador > automaticamente otimiza o código compilado retirando esse código morto. > > - Java não possui Padronização por algum organismo internacional > > ??? Já ouviu falar em Enterprise JavaBeans, Servlet, JSP, etc. Diversas > empresas adotaram essas especificações, independentemente de imposições da > Sun. Apenas a Máquina Virtual da microsoft não era compatível com todas as > demais, daí a derrota da Microsoft na justiça. > > - Java não Chama APIs do Windows e DLLs > > Lógico que chama via JNI. > > Como voce percebe pelos meus comentários acima. Vc definitivamente não é a > pessoa certa para fazer essa comparação entre C# e Java. A não ser que vc > seja um homem de marketing e não da área de TI. > > -- > Sergio Oliveira Jr. > Sun Certified Java Programmer > Desenvolvedor e Consultor Java > Empresa SmartJava > -- > > > > >Fro