Re: [java-list] Re: Artigo Java x C# GEA2
Original Message Follows From: Alessandro Romero [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: [java-list] Re: Artigo Java x C# GEA2 Date: Thu, 4 Oct 2001 11:05:02 -0300 Amigos, O interessante aqui, é perceber que quando programamos: String s; s = ale; Isto é o mesmo que s = new String( ale ); Not really... Qdo vc faz dessa segunda forma, vc criou dois objetos diferentes... - Michael Nascimento Santos Sun Certified Programmer for the Java 2 Platform Moderador SouJava - www.soujava.org.br _ Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp -- 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] Re: Artigo Java x C# - CONCLUSAO FINAL
A vantagem disso e' performance. Nao sei se voce programa em C++ ou nao, mas toda vez que voce passa um objeto por referencia vc requer uma alocacao na heap, o que custa mais caro em termos de performance do que um parametro passado na stack. Entao por exemplo, se voce tiver que escrever uma classe wrapper para poder alterar um valor int dentro de uma funcao, o seu programa esta fazendo basicamente as seguintes operacoes: - criar instancia da classe wrapper - alocacao dinamica na heap - colocar valor inteiro dentro desta instancia - coloca referencia na stack - chama funcao MudaValor Dentro da funcao MudaValor. - Dereferencia a referencia (que nada mais e' que um pointer) - altera o valor atraves do pointer - retorna Quando vc passa por referencia, voce executa as seguintes operacoes: - coloca valor inteiro na stack - chama funcao Dentro da funcao MudaValor: - altera valor na stack - retorna O numero de operacoes e' significativamente menor. Ai' tambem tem outra coisa relacionada que eu notei que o pessoal nao entendeu muito bem porque o C# tem structs. Quando voce declara: class Point { int x; int y; } em C#, funciona exatamente igual a Java. Ou seja, quando voce faz: Point p = new Point() p.x = 1; p.y = 2; voce esta' fazendo por tras: - Aloca instancia na Heap de 8 bytes (2 inteiros) - incrementa o stack pointer para guardar a referencia a instancia na heap - dereferencia o pointer - atraves do pointer muda o valor de x - atraves do pointer muda o valor de y Agora em C#, para evitar o custo da dereferencia do pointer ou alocacao na heap, se voce usa structs: struct Point { int x; int y; } O compilador entende que esse e' um tipo de valor, logo, isso vai ser alocado sempre na Stack: Point p = new Point() p.x = 1; p.y = 2; - Incrementa o stack pointer em 8 posicoes - altera o valor de x na stack - altera o valor de y na stack note que nenhuma alocacao dinamica teve que acontecer. Em outras palavras, structs em C# e' completamente diferente de structs em C/C++. Alem disso a razao dele existir e' a mesma porque o Java nao deriva int e char de Object: performance. A diferenca aqui e' que em C# voce pode levar esse ganho de performance para tipos definidos pelo usuario, enquanto que em Java, voce esta preso ao que foi especificado pela linguagem. My 2 cents. Marcelo Uemura Software Design Engineer Microsoft Corporation - MSDN Disclaimer: o conteudo dessa mensagem e' minha opiniao pessoal e de maneira nenhuma representa uma posicao oficial da Microsoft. --- Sergio Oliveira Jr. [EMAIL PROTECTED] wrote: Realmente Java faz uma cópia da referencia antes de passá-la para a função, mas estou curioso para saber qual é a diferença que isso faz na prática? Posso estar errado, mas acho que toda essa confusão veio da diferença que em C++ Strings são mutáveis e em Java não são. O ponto é: Não dá para alterar a cópia da referência que ficou fora da função de dentro da função. Em C++ vc pode fazer isso MESMO PARA OBJETOS IMUTÁVEIS: altereIsso(a, b, c); Em Java não dá para fazer isso para OBJETOS IMUTÁVEIS: altereIsso(a, b, c); // Não dá se for imutável. Se for imutável em Java vc terá que fazer: a = altereIsso(a); b = altereIsso(b); c = altereIsso(c); NA MINHA CABEÇA ISSO É MAIS UMA DIFERENÇA NA SINTAXE DA LINGUAGEM DO QUE UMA VANTAGEM. Mas pode ser que alguém apresente algum caso em que isso seria realmente uma vantagem de C++/C#. --- Sergio Oliveira Jr. Sun Certified Java Programmer Desenvolvedor e Consultor Java Empresa SmartJava WWW.SMARTJAVA.COM.BR Dê ao homem um peixe e alimente-o por um dia. Ensine-o a pescar e alimente-o por uma vida. --- From: Luiz Fernando Bicalho [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: RE: [java-list] Re: Artigo Java x C# Date: Thu, 4 Oct 2001 10:06:10 -0300 entao o cara esta certo, e passagem por valor -Original Message- From: Ricardo Santiago [mailto:[EMAIL PROTECTED]] Sent: quinta-feira, 4 de outubro de 2001 07:58 To: [EMAIL PROTECTED] Subject: Re: [java-list] Re: Artigo Java x C# Cara, neste caso voce esta MUDANDO a referencia que voce recebeu. Voce esta criando uma NOVA referencia e tentando atribuir ` referencia que voce recebeu como parametro. Mas a passagem de objetos EH por referencia (as referencias sao passadas por valor) Exemplo: class Numero { private int value; public Numero(int value) { this.value = value; } public void inc() { value++; } public int getValue() { return value; } public static void main(String [] s) { Numero num = new Numero(1); System.out.println(num + num.getValue()); increment(num); System.out.println(num + num.getValue()); } private static void increment(Numero num) { num.inc(); } } Ricardo Munhoz Santiago
Re: [java-list] Re: Artigo Java x C#
Bem, sei que não tenho ainda tanta experiência com Java, mas o que aprendi no Thinking in Java de Bruce Eckel é exatamente o que o Carlos Chierici falou: objetos são sempre passados por referência. --- Leonardo Souza Mario Bueno [EMAIL PROTECTED] escreveu: Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] - ___ 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] Re: Artigo Java x C#
Cara, neste caso voce esta MUDANDO a referencia que voce recebeu. Voce esta criando uma NOVA referencia e tentando atribuir à referencia que voce recebeu como parametro. Mas a passagem de objetos EH por referencia (as referencias sao passadas por valor) Exemplo: class Numero { private int value; public Numero(int value) { this.value = value; } public void inc() { value++; } public int getValue() { return value; } public static void main(String [] s) { Numero num = new Numero(1); System.out.println(num + num.getValue()); increment(num); System.out.println(num + num.getValue()); } private static void increment(Numero num) { num.inc(); } } Ricardo Munhoz Santiago --- Leonardo Souza Mario Bueno [EMAIL PROTECTED] wrote: Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] - __ Do You Yahoo!? NEW from Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month. http://geocities.yahoo.com/ps/info1 -- 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] Re: Artigo Java x C# GEA2
Não estou querendo te chamar de louco, mas acho que voce deveria ter testado antes de dizer que sempre funcionou errado. Por voce mesmo nao testa? public class ProvaDaPassagemPorValor { public static void main(String [] s) { String s = test; int i = 1; mudeOsValores(s, i); System.out.println(s + i); } private static void mudeOsValores(String s, int i) { s = outroValor; i = 2; } } Ricardo Munhoz Santiago --- Wild Boar Wannabe [EMAIL PROTECTED] wrote: Perae !!! Eh claro que refletira as mudancas !!! Apos ser chamado o metodo mudeOsValores() o inteiro e a String mandados por parametro terao seus valores mudados !!! Ou entao eu tou louco !!! Por que sempre foi assim pra mim ... --- Ricardo Santiago [EMAIL PROTECTED] escreveu: Cara, vamos deixar claro: Tudo em java é passado por valor. MAS, você só mantém REFERENCIAS para objetos (ou pointeiros se achar melhor). Logo, todo objeto é passado por referencia visto que a referencia é que é passada por valor! Isso não implica de forma alguma em perda de performance, simplesmente significa que qq váriavel que você passar como paramêtro, se for modificada dentro do método invocado,não refletirá as mudanças quando o método retornar Como em: String s = test; int i = 1; mudeOsValores(s, i); System.out.println(s + 1); // == test1 Onde o metodo mudeOsValores contem o seguinte codigo public void mudeOsValores(String s, int i) { s = outracoisa; i = 2; } Ricardo Munhoz Santiago --- [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
Fwd: Re: [java-list] Re: Artigo Java x C#
Leonardo, Esqueci de falar que realmente analisei seu exemplo incorretamente, desculpe-me, final do dia, muitas discussões, dá nisso mesmo ... não vi que vc estava alterando a referência i, achei que vc estava incrementando um tipo primitivo int dentro da função. Gabriel Date: Wed, 03 Oct 2001 21:21:56 -0300 To: Leonardo Bueno [EMAIL PROTECTED], [EMAIL PROTECTED] From: Gabriel De Munno Francisco [EMAIL PROTECTED] Subject: Re: [java-list] Re: Artigo Java x C# Tudo bem, Mas daí você cai no caso da classe imutável já explicado num email na lista... O objeto Integer é public final class Integer Por isso, você não pode alterar o valor, somente criando um novo objeto... Gabriel At 20:51 03/10/2001 -0300, Leonardo Bueno wrote: Acho que não.. no meu exemplo o metod inc altera o valor da copia local de i ao fazer a atribuição i = new Integer(i.intValue()++); ou estou enganado? Novamente: em java, toda a passagem de parametros e por valor, inclusive quando usamos objetos como parametros... neste caso a referencia e passada por valor. []'s, Leonardo. - Original Message - From: Gabriel De Munno Francisco [EMAIL PROTECTED] To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Cc: Leonardo Souza Mario Bueno [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 8:27 PM Subject: Re: [java-list] Re: Artigo Java x C# Leornardo, Você está equivocado, no exemplo que você deu, o método não está alterando o objeto, está simplesmente imprimindo o resultado da chamada do método intValue() incrementado de 1, por isso não houve mudança no valor do objeto durante a chamada. Mas em Java, quando você passa um objeto, vc está passando uma referência. Gabriel At 17:36 03/10/2001 -0300, Leonardo Souza Mario Bueno wrote: Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] Re: Artigo Java x C#
Tudo bem, Mas daí você cai no caso da classe imutável já explicado num email na lista... O objeto Integer é public final class Integer Por isso, você não pode alterar o valor, somente criando um novo objeto... Gabriel At 20:51 03/10/2001 -0300, Leonardo Bueno wrote: Acho que não.. no meu exemplo o metod inc altera o valor da copia local de i ao fazer a atribuição i = new Integer(i.intValue()++); ou estou enganado? Novamente: em java, toda a passagem de parametros e por valor, inclusive quando usamos objetos como parametros... neste caso a referencia e passada por valor. []'s, Leonardo. - Original Message - From: Gabriel De Munno Francisco [EMAIL PROTECTED] To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Cc: Leonardo Souza Mario Bueno [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 8:27 PM Subject: Re: [java-list] Re: Artigo Java x C# Leornardo, Você está equivocado, no exemplo que você deu, o método não está alterando o objeto, está simplesmente imprimindo o resultado da chamada do método intValue() incrementado de 1, por isso não houve mudança no valor do objeto durante a chamada. Mas em Java, quando você passa um objeto, vc está passando uma referência. Gabriel At 17:36 03/10/2001 -0300, Leonardo Souza Mario Bueno wrote: Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] Re: Artigo Java x C#
Acho que não.. no meu exemplo o metod inc altera o valor da copia local de i ao fazer a atribuição i = new Integer(i.intValue()++); ou estou enganado? Novamente: em java, toda a passagem de parametros e por valor, inclusive quando usamos objetos como parametros... neste caso a referencia e passada por valor. []'s, Leonardo. - Original Message - From: Gabriel De Munno Francisco [EMAIL PROTECTED] To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Cc: Leonardo Souza Mario Bueno [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 8:27 PM Subject: Re: [java-list] Re: Artigo Java x C# Leornardo, Você está equivocado, no exemplo que você deu, o método não está alterando o objeto, está simplesmente imprimindo o resultado da chamada do método intValue() incrementado de 1, por isso não houve mudança no valor do objeto durante a chamada. Mas em Java, quando você passa um objeto, vc está passando uma referência. Gabriel At 17:36 03/10/2001 -0300, Leonardo Souza Mario Bueno wrote: Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] - -- 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] Re: Artigo Java x C#
Leornardo, Você está equivocado, no exemplo que você deu, o método não está alterando o objeto, está simplesmente imprimindo o resultado da chamada do método intValue() incrementado de 1, por isso não houve mudança no valor do objeto durante a chamada. Mas em Java, quando você passa um objeto, vc está passando uma referência. Gabriel At 17:36 03/10/2001 -0300, Leonardo Souza Mario Bueno wrote: Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] - -- 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] Re: Artigo Java x C#
entao o cara esta certo, e passagem por valor -Original Message- From: Ricardo Santiago [mailto:[EMAIL PROTECTED]] Sent: quinta-feira, 4 de outubro de 2001 07:58 To: [EMAIL PROTECTED] Subject: Re: [java-list] Re: Artigo Java x C# Cara, neste caso voce esta MUDANDO a referencia que voce recebeu. Voce esta criando uma NOVA referencia e tentando atribuir ` referencia que voce recebeu como parametro. Mas a passagem de objetos EH por referencia (as referencias sao passadas por valor) Exemplo: class Numero { private int value; public Numero(int value) { this.value = value; } public void inc() { value++; } public int getValue() { return value; } public static void main(String [] s) { Numero num = new Numero(1); System.out.println(num + num.getValue()); increment(num); System.out.println(num + num.getValue()); } private static void increment(Numero num) { num.inc(); } } Ricardo Munhoz Santiago --- Leonardo Souza Mario Bueno [EMAIL PROTECTED] wrote: Nain, nain. Java nco tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) i passada uma referencia ao objeto i por valor.. ou seja, mudangas na referencia dentro do metodo nco terco efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# Sirgio, Eu gostaria de fazer uma pequena corregco no seu email. Java nco possui passagem por referjncia. Somente por valor. Existe uma forma de simular passagem de parbmetros por referjncia, utilizando os objetos ou tipos primitivos armazenados em um array, por exemplo. Mas nco existe passagem por referjncia. Antes que o alguim dj pulinhos de alegria, eu pergunto: e qual i o problema? Alguim por favor, apresente um artigo demonstrativo, baseado em testes de performance ou de algum requisito que mostre qual i o grandismssimo problema de Java utilizar passagem por valor, e nco por referjncia? Mesmo que haja, isso significa que Java i ruim? Abragos, Denard -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuarios Java da Sucesu-SP dzvidas 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] - -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuarios Java da Sucesu-SP dzvidas 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] - __ Do You Yahoo!? NEW from Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month. http://geocities.yahoo.com/ps/info1 -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuarios Java da Sucesu-SP dzvidas 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] - -- 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] Re: Artigo Java x C#
De uma olhada no seu codigo. Ele nao funciona. Nao dah p/ fazer: i.intValue()++ Alem disso vc esta criando um novo objeto dentro do metodo inc. Entao, mesmo que o codigo acima funcionasse, como vc espera trabalhar no objeto recebido como parametro se vc esta trabalhando em um novo objeto que vc acabou de criar? Enfim, nao serve como exemplo de passagem de parametros por referencia. Experimente o codigo que enviei e vc vera que java passa objetos por referencia e primitivos por valor. []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: Leonardo Souza Mario Bueno [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 5:36 PM Subject: Re: [java-list] Re: Artigo Java x C# Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] - -- 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] Re: Artigo Java x C#
- Original Message - From: Ricardo Santiago [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, October 04, 2001 7:58 AM Subject: Re: [java-list] Re: Artigo Java x C# Cara, neste caso voce esta MUDANDO a referencia que voce recebeu. Exatamente! Voce esta criando uma NOVA referencia e tentando atribuir à referencia que voce recebeu como parametro. Isso mesmo... Mas a passagem de objetos EH por referencia Aqui eu descordo.. a passagem é por valor. (as referencias sao passadas por valor) Perfeito.. note que passagem DE referencia POR valor != passagem por referencia []'s, Leonardo. Exemplo: class Numero { private int value; public Numero(int value) { this.value = value; } public void inc() { value++; } public int getValue() { return value; } public static void main(String [] s) { Numero num = new Numero(1); System.out.println(num + num.getValue()); increment(num); System.out.println(num + num.getValue()); } private static void increment(Numero num) { num.inc(); } } Ricardo Munhoz Santiago --- Leonardo Souza Mario Bueno [EMAIL PROTECTED] wrote: Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] - __ Do You Yahoo!? NEW from Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month. http://geocities.yahoo.com/ps/info1 -- 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] - -- LISTA SOUJAVA
Re: [java-list] Re: Artigo Java x C#
Po Leonardo nao pisa na bola cara. public void inc(Integer i) { i = new Integer(i.intValue()++); se voce prestar atenção no seu codigo vai ver que você cria uma nova instancia de um Integer nesta linha acima, perdendo assim completamente a referencia que você passou na chamada. Type wrappers não são uma boa opção para demonstrar passagem por referencia porque não permitem que você altere o valor embutido neles. Que tal alguma coisa assim: public class App { public App() { } public static void main(String[] args) { App app1 = new App(); Inteiro inteiro = new Inteiro(); inteiro.setValor(1); System.out.println(O valor do inteiro é: + inteiro.getValor()); inc(inteiro); System.out.println(O valor do inteiro é: + inteiro.getValor()); } public static void inc(Inteiro obj) { int novoValor = obj.getValor(); novoValor = ++novoValor; obj.setValor(novoValor); } } class Inteiro { public Inteiro() { } private int valor; public int getValor() { return valor; } public void setValor(int valor) { this.valor = valor; } } Entao com isso provamos o que está escrito em qualquer livro que preste: Objetos em java são sempre passados por referência enquanto tipos primitivos são passados por valor. Um abraço Renato - Original Message - From: Leonardo Souza Mario Bueno [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 5:36 PM Subject: Re: [java-list] Re: Artigo Java x C# Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] - -- 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] Re: Artigo Java x C#
Página 328 do livro Thinking in Java, do Bruce Eckel: Na seção pass by value ele discute com mais detalhes essa questão, apesar de desde o começo do capítulo ele dar a entender que existe passagem por referência. Ele coloca dois pontos de vista. No primeiro, ele afirma: "Java passes everything by value". No segundo, ele diz: "Java passes primitives by value(no argument there) but objects are passed by reference". Mais adiante, no mesmo parágrafo, ele diz: "Since ou don´t get a local copy of the object when you pass it into a method, objects are clearly not passed by value" Leiam com atenção essa seção e verão o que digo abaixo. Se vcs lerem com bastante atenção, ele fala de um handle. Esse handle é o endereço para o objeto, o que ele,logo na primeira página do capítulo, também chama de safety pointer(ponteiros seguros). O que acontece em Java é que não há como passar o objeto como parâmetro, e sim o handle dele. Quando o método recebe o handle, é criada uma cópia do handle, mas o objeto continua quietinho, não é criada uma cópia dele. Nesse momento, existem dois handles apontando para o mesmo objeto. Isso gera um comportamento similar à passagem por referência, porque utilizando um ou outro, o estado do objeto vai ser alterado. De uma vez por todas: NÃO EXISTE PASSAGEM POR REFERÊNCIA EM JAVA! O comportamento é muito similar, mas é por valor. Abraços, Denard -Original Message- From: Marcos Guedes [mailto:[EMAIL PROTECTED]] Sent: quinta-feira, 4 de outubro de 2001 08:31 To: [EMAIL PROTECTED] Subject: Re: [java-list] Re: Artigo Java x C# Bem, sei que não tenho ainda tanta experiência com Java, mas o que aprendi no Thinking in Java de Bruce Eckel é exatamente o que o Carlos Chierici falou: objetos são sempre passados por referência. --- Leonardo Souza Mario Bueno [EMAIL PROTECTED] escreveu: Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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
Re: [java-list] Re: Artigo Java x C#
no public final class somente quer dizer que no pode extender este classe. Os valores podem ser alterado. Gabriel De Munno Francisco wrote: [EMAIL PROTECTED]"> Tudo bem, Mas da voc cai no caso da classe imutvel j explicado num email na lista... O objeto Integer "public final class Integer" Por isso, voc no pode alterar o valor, somente criando um novo objeto... Gabriel At 20:51 03/10/2001 -0300, Leonardo Bueno wrote: Acho que no.. no meu exemplo o metod inc altera o valor da copia local de i ao fazer a atribuio i = new Integer(i.intValue()++); ou estou enganado? Novamente: em java, toda a passagem de parametros e por valor, inclusive quando usamos objetos como parametros... neste caso a referencia e passada por valor. []'s, Leonardo. - Original Message - From: "Gabriel De Munno Francisco" [EMAIL PROTECTED] To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Cc: "Leonardo Souza Mario Bueno" [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 8:27 PM Subject: Re: [java-list] Re: Artigo Java x C# Leornardo, Voc est equivocado, no exemplo que voc deu, o mtodo no est alterando o objeto, est simplesmente imprimindo o resultado da chamada do mtodo intValue() incrementado de 1, por isso no houve mudana no valor do objeto durante a chamada. Mas em Java, quando voc passa um objeto, vc est passando uma referncia. Gabriel At 17:36 03/10/2001 -0300, Leonardo Souza Mario Bueno wrote: Nain, nain. Java no tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println("i = " + i); // i = 2 } i = new Integer(1); inc(i); System.out.println("i = " + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) passada uma referencia ao objeto i por valor.. ou seja, mudanas na referencia dentro do metodo no tero efeito fora dele.. []'s, Leonardo. - Original Message - From: "Carlos E O Chierici" [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# Srgio, Eu gostaria de fazer uma pequena correo no seu email. Java no possui passagem por referncia. Somente por valor. Existe uma forma de "simular" passagem de parmetros por referncia, utilizando os objetos ou tipos primitivos armazenados em um array, por exemplo. Mas no existe passagem por referncia. Antes que o algum d pulinhos de alegria, eu pergunto: e qual o problema? Algum por favor, apresente um artigo demonstrativo, baseado em testes de performance ou de algum requisito que mostre qual o grandisssimo problema de Java utilizar passagem por valor, e no por referncia? Mesmo que haja, isso significa que Java ruim? Abraos, Denard -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usurios Java da Sucesu-SP dvidas 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] - -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usurios Java da Sucesu-SP dvidas 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] Re: Artigo Java x C# GEA2
Amigos, O interessante aqui, é perceber que quando programamos: String s; s = ale; Isto é o mesmo que s = new String( ale ); É executado uma construção de uma nova String por isso o valor não é mudado... Mas o int me pegou :):) Por que o int não muda?? Não é um tipo primitivo? Abraços, Alessandro. - Original Message - From: Ricardo Santiago [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, October 04, 2001 7:42 AM Subject: RE: [java-list] Re: Artigo Java x C# GEA2 Não estou querendo te chamar de louco, mas acho que voce deveria ter testado antes de dizer que sempre funcionou errado. Por voce mesmo nao testa? public class ProvaDaPassagemPorValor { public static void main(String [] s) { String s = test; int i = 1; mudeOsValores(s, i); System.out.println(s + i); } private static void mudeOsValores(String s, int i) { s = outroValor; i = 2; } } Ricardo Munhoz Santiago --- Wild Boar Wannabe [EMAIL PROTECTED] wrote: Perae !!! Eh claro que refletira as mudancas !!! Apos ser chamado o metodo mudeOsValores() o inteiro e a String mandados por parametro terao seus valores mudados !!! Ou entao eu tou louco !!! Por que sempre foi assim pra mim ... --- Ricardo Santiago [EMAIL PROTECTED] escreveu: Cara, vamos deixar claro: Tudo em java é passado por valor. MAS, você só mantém REFERENCIAS para objetos (ou pointeiros se achar melhor). Logo, todo objeto é passado por referencia visto que a referencia é que é passada por valor! Isso não implica de forma alguma em perda de performance, simplesmente significa que qq váriavel que você passar como paramêtro, se for modificada dentro do método invocado,não refletirá as mudanças quando o método retornar Como em: String s = test; int i = 1; mudeOsValores(s, i); System.out.println(s + 1); // == test1 Onde o metodo mudeOsValores contem o seguinte codigo public void mudeOsValores(String s, int i) { s = outracoisa; i = 2; } Ricardo Munhoz Santiago --- [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
Re: [java-list] Re: Artigo Java x C#
- Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, October 04, 2001 10:07 AM Subject: Re: [java-list] Re: Artigo Java x C# De uma olhada no seu codigo. Ele nao funciona. Nao dah p/ fazer: i.intValue()++ É mesmo.. me pegou, substitua por i.intValue()+1. Mesmo assim não vai rodar.. falta declarar main, etc. etc. etc. Alem disso vc esta criando um novo objeto dentro do metodo inc. Entao, mesmo que o codigo acima funcionasse, como vc espera trabalhar no objeto recebido como parametro se vc esta trabalhando em um novo objeto que vc acabou de criar? Exatamente! É para mostrar que não existe passagem de parametro por referencia! Enfim, nao serve como exemplo de passagem de parametros por referencia. Experimente o codigo que enviei e vc vera que java passa objetos por referencia e primitivos por valor. Discordo.. você passa uma referencia por valor.. e isto não é o mesmo que passagem por referencia. []s Carlos E O Chierici [EMAIL PROTECTED] []'s, Leonardo Bueno. - Original Message - From: Leonardo Souza Mario Bueno [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 5:36 PM Subject: Re: [java-list] Re: Artigo Java x C# Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] - -- 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] - -- 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] Re: Artigo Java x C#
- Original Message - From: Renato Quedas [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, October 04, 2001 10:29 AM Subject: Re: [java-list] Re: Artigo Java x C# Po Leonardo nao pisa na bola cara. public void inc(Integer i) { i = new Integer(i.intValue()++); se voce prestar atenção no seu codigo vai ver que você cria uma nova instancia de um Integer nesta linha acima, perdendo assim completamente a referencia que você passou na chamada. Pessoal interessado nesta discussão, (Já devem ser poucos.. tá ficando pior do que a discussão sobre overloading/polimorfismo :) Eu sei que estou criando outo objeto.. o único erro que há nesta linha é que i.intValue()++ não compila porque é equivalente à i.intValue() = i.intValue() + 1 que não é válido. Eu estou atribuindo uma nova instancia a i para mostrar que o parametro é passado por valor.. se não fosse a alteração teria efeito além do escopo do metodo. Type wrappers não são uma boa opção para demonstrar passagem por referencia porque não permitem que você altere o valor embutido neles. A passagem de parametros segue a mesma regra para qualquer objeto ou tipo em java.. sempre por valor. Que tal alguma coisa assim: public class App { public App() { } public static void main(String[] args) { App app1 = new App(); Inteiro inteiro = new Inteiro(); inteiro.setValor(1); System.out.println(O valor do inteiro é: + inteiro.getValor()); inc(inteiro); System.out.println(O valor do inteiro é: + inteiro.getValor()); } public static void inc(Inteiro obj) { int novoValor = obj.getValor(); novoValor = ++novoValor; obj.setValor(novoValor); } } class Inteiro { public Inteiro() { } private int valor; public int getValor() { return valor; } public void setValor(int valor) { this.valor = valor; } } Entao com isso provamos o que está escrito em qualquer livro que preste: Objetos em java são sempre passados por referência enquanto tipos primitivos são passados por valor. Como um outro participante da lista já informou, o livro de estudos para certificação Java 2 fala expliciramente que toda passagem de parametros em java é por valor. Este exemplo não serve para provar que objetos são passados por referencia (Mesmo porque é impossível provar isto ;-) pois você não recebe um objeto como parametro e altera o valor dele. Um abraço Renato Bom, já mostrei meus argumentos em vários posts e acho que não tem sentido mais ficar repetindo-os.. vamos mudar pra uma discussão mais legal tipo Qual é melhor JBuilder ou Forte, Vale a pena certificação (Acho que vale.. você aprende que PDP é por valor ;-) ou então Method overloading é polimorfismo?. []'s, Leonardo. - Original Message - From: Leonardo Souza Mario Bueno [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 5:36 PM Subject: Re: [java-list] Re: Artigo Java x C# Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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
RE: [java-list] Re: Artigo Java x C# GEA2 DE UMA OLHADA AGORA
Eh o seguinte , realmente achei que tava louco , mas entao fiz um outro exemplo pra tu dares uma olhada ... neste caso eu procuro nao fazer as coisas dentro do metodo main() ... fiz uma filha de JApplet mas tu podes rodar com o comamdo java EEste , nao precisa do appletviewer ... O que importa eh que tu repares como temos um Quadradinho (um objeto de uma classe qualquer) que eh mandado por parametro tendo um dado inteiro coordx igual a 1 , e apos executado o metodo mudeOsValores() este valor eh alterado para 0 ... e entao , me explica esta passagem por valor !!! ... Cara , eu fiquei abismado quando testei o que tu mandaste e realmente funcionou como tu diceste , mas daih eu pensei que tivesse a ver com o metodo main , que eh statico , e coloquei no init() (por isso fiz uma filha de JAPplet) , mas deu na mesma para o inteiro e a String , interessante como um inteiro e um objeto do tipo String se comportam diferente de todos os objetos que jah criei ateh hoje (como o Quadradinho por exemplo) ... import javax.swing.*; import java.awt.*; public class EEste extends JApplet{ Quadradinho q; public void init(){ q=new Quadradinho(new Rectangle(),1,1,1); System.out.println(q.coordx= +q.coordx); mudeOsValores(q); System.out.println(q.coordx= +q.coordx); } void mudeOsValores(Quadradinho q) { q.coordx=0; } public static void main(String args[]){ EEste ee=new EEste(); ee.init(); ee.start(); } } /*tu vais precisar da classe Quadradinho tambem , mas eh soh pra funcionar mesmo , trata-se de uma classe que eu tinha aqui a mao pra exemplo*/ import java.awt.*; public class Quadradinho{ public Rectangle r; public int coordx,coordy,redesup,redeinf,index; public Quadradinho(Rectangle re,int x,int y,int i){ redesup=0; redeinf=0; r=re; coordx=x; coordy=y; index=i; } } --- Ricardo Santiago [EMAIL PROTECTED] escreveu: Não estou querendo te chamar de louco, mas acho que voce deveria ter testado antes de dizer que sempre funcionou errado. Por voce mesmo nao testa? public class ProvaDaPassagemPorValor { public static void main(String [] s) { String s = test; int i = 1; mudeOsValores(s, i); System.out.println(s + i); } private static void mudeOsValores(String s, int i) { s = outroValor; i = 2; } } Ricardo Munhoz Santiago --- Wild Boar Wannabe [EMAIL PROTECTED] wrote: Perae !!! Eh claro que refletira as mudancas !!! Apos ser chamado o metodo mudeOsValores() o inteiro e a String mandados por parametro terao seus valores mudados !!! Ou entao eu tou louco !!! Por que sempre foi assim pra mim ... --- Ricardo Santiago [EMAIL PROTECTED] escreveu: Cara, vamos deixar claro: Tudo em java é passado por valor. MAS, você só mantém REFERENCIAS para objetos (ou pointeiros se achar melhor). Logo, todo objeto é passado por referencia visto que a referencia é que é passada por valor! Isso não implica de forma alguma em perda de performance, simplesmente significa que qq váriavel que você passar como paramêtro, se for modificada dentro do método invocado,não refletirá as mudanças quando o método retornar Como em: String s = test; int i = 1; mudeOsValores(s, i); System.out.println(s + 1); // == test1 Onde o metodo mudeOsValores contem o seguinte codigo public void mudeOsValores(String s, int i) { s = outracoisa; i = 2; } Ricardo Munhoz Santiago --- [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ê
RE: [java-list] Re: Artigo Java x C# - CONCLUSAO FINAL
Realmente Java faz uma cópia da referencia antes de passá-la para a função, mas estou curioso para saber qual é a diferença que isso faz na prática? Posso estar errado, mas acho que toda essa confusão veio da diferença que em C++ Strings são mutáveis e em Java não são. O ponto é: Não dá para alterar a cópia da referência que ficou fora da função de dentro da função. Em C++ vc pode fazer isso MESMO PARA OBJETOS IMUTÁVEIS: altereIsso(a, b, c); Em Java não dá para fazer isso para OBJETOS IMUTÁVEIS: altereIsso(a, b, c); // Não dá se for imutável. Se for imutável em Java vc terá que fazer: a = altereIsso(a); b = altereIsso(b); c = altereIsso(c); NA MINHA CABEÇA ISSO É MAIS UMA DIFERENÇA NA SINTAXE DA LINGUAGEM DO QUE UMA VANTAGEM. Mas pode ser que alguém apresente algum caso em que isso seria realmente uma vantagem de C++/C#. --- Sergio Oliveira Jr. Sun Certified Java Programmer Desenvolvedor e Consultor Java Empresa SmartJava WWW.SMARTJAVA.COM.BR Dê ao homem um peixe e alimente-o por um dia. Ensine-o a pescar e alimente-o por uma vida. --- From: Luiz Fernando Bicalho [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: RE: [java-list] Re: Artigo Java x C# Date: Thu, 4 Oct 2001 10:06:10 -0300 entao o cara esta certo, e passagem por valor -Original Message- From: Ricardo Santiago [mailto:[EMAIL PROTECTED]] Sent: quinta-feira, 4 de outubro de 2001 07:58 To: [EMAIL PROTECTED] Subject: Re: [java-list] Re: Artigo Java x C# Cara, neste caso voce esta MUDANDO a referencia que voce recebeu. Voce esta criando uma NOVA referencia e tentando atribuir ` referencia que voce recebeu como parametro. Mas a passagem de objetos EH por referencia (as referencias sao passadas por valor) Exemplo: class Numero { private int value; public Numero(int value) { this.value = value; } public void inc() { value++; } public int getValue() { return value; } public static void main(String [] s) { Numero num = new Numero(1); System.out.println(num + num.getValue()); increment(num); System.out.println(num + num.getValue()); } private static void increment(Numero num) { num.inc(); } } Ricardo Munhoz Santiago --- Leonardo Souza Mario Bueno [EMAIL PROTECTED] wrote: Nain, nain. Java nco tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) i passada uma referencia ao objeto i por valor.. ou seja, mudangas na referencia dentro do metodo nco terco efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# Sirgio, Eu gostaria de fazer uma pequena corregco no seu email. Java nco possui passagem por referjncia. Somente por valor. Existe uma forma de simular passagem de parbmetros por referjncia, utilizando os objetos ou tipos primitivos armazenados em um array, por exemplo. Mas nco existe passagem por referjncia. Antes que o alguim dj pulinhos de alegria, eu pergunto: e qual i o problema? Alguim por favor, apresente um artigo demonstrativo, baseado em testes de performance ou de algum requisito que mostre qual i o grandismssimo problema de Java utilizar passagem por valor, e nco por referjncia? Mesmo que haja, isso significa que Java i ruim? Abragos, Denard -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuarios Java da Sucesu-SP dzvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da
Re: [java-list] Re: Artigo Java x C#
Senhores, Isto aqui está parecendo o Afeganistão e o Paquistão, pois falam a mesma lingua e ninguem se entende. Esta discussão não leva a nada pois parece briga em balcão de botequim domingo a tarde depois do clássico Coringão x Palestra. Resolve discutir se foi falta ou não, se o juiz roubou, se o ponta de lança estava em off-side na hora do gol ? A mesma coisa acontece aqui, não importa se Java é melhor que C#, ou vice-versa, importa sim é que que queira usar que use. Nesses meus 20 anos de informática vi ótimos aplicativos feitos em linguagem macro do Excel e verdadeiras porcarias feitas em C e Java, mas isto não se deve a linguagem ou tecnologia e sim a capacidade de quem está escrevendo/desenvolvendo. Pessoal, não importa se você gosta mais do C# que do Java, ou que você prefere o Java ao Visual Basic, o que importa é que este fórum foi criado para troca de informações e não de agressões. Caro moderador, outro dia solicitei que usasse de seu poder e não permitisse esse tipo de coisa, mas pelo visto você gosta de ver um bom barraco. Só que isso não contribui em nada, pelo contrário só aumenta o tráfego de mensagens inúteis e inimizades. A idéia original de um Fórum é a discussão, mas a sadia, é a troca de informação e não palavrão. Desculpe Carlos A Vitagliano [EMAIL PROTECTED] - Original Message - From: Sergio Oliveira Jr. To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] ; [EMAIL PROTECTED] Sent: Tuesday, October 02, 2001 11:38 PM Subject: [java-list] Re: Artigo Java x C# Caro Mauro, O que eu posso te falar é que tenho 6 anos de experiência com a tecnologia Java, passagem por uma multinacional de consultoria e diversos projetos Java nas costas. Também sou certificado pela Sun desde 1998. Logo acho que vc deveria acreditar em mim quando o assunto é Java. Já quando o assunto é C# e .Net eu recolho a minha inexperiência e te escuto. Acredito que .Net seja uma tecnologia interessante para plataformas 100% microsoft, e estou disposto a investigar o CD-ROM do Visual Studio .Net Beta que eu recebi outro dia. Só achei engraçado o que a Microsoft colocou no site dela (www.microsoft.com/java): JUMP to .NET - Java User Migration Path to Microsoft .NET Aí já é forçassão de barra !!! :-) Acredito tb que a estratégia da Microsoft de degradar a imagem do Java para lançar o seu produto concorrente não é a mais indicada para conquistar os milhões de profissionais Java espalhados pelo mundo. Vale lembrar que não estamos mais falando de simples browsers e sim de uma plataforma madura que está dentro de muitas empresas sérias e por trás de grandes negócios. Isso não vai ser mudado de uma hora para outra. A melhor situação para o mercado de TI é a convivência pacífica entre essas duas tecnologias. Concorrência gera melhorias nos serviços e produtos. Vai ser melhor para todo mundo, principalmente para nós profissionais de TI que vamos ter mais uma opção de tecnologia para plataformas Microsoft. Vou ficar aguardando ansiosamente o seu novo artigo e espero que ele seja mais realista quando retratar as diferenças entre C# e Java. Só assim eu me sentirei seguro em utilizar .Net como uma alternativa conciente, e não apenas por que a Microsoft deseja no seu ego passar por cima da Sun Microsystems. -- Sergio Oliveira Jr. Sun Certified Java Programmer Desenvolvedor e Consultor Java Empresa SmartJava -- From: Mauro Sant'Anna [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: Artigo Java x C# Date: Wed, 03 Oct 2001 02:07:13 + Caro Sergio, Devido a duvidas como as suas, estou escrevendo outro artigo que deverá aparecer nos próximos dias no site da Microsoft. Ele explica alguns dos tópicos que deram origem a mais dúvidas. Já te adianto: seus pontos serão respondidos, se você estiver disposto a ouvir. No entanto, vendo a sua lista de absurdos tenho minhas dúvidas se adiantará alguma coisa. As coisas que você elencou são simplesmente erradas. Algumas me parecem confusões honestas, mas a maioria dá a impressão que você simplesmente não quer entender. Aguarde o artigo. Mauro From: Sergio Oliveira Jr. [EMAIL PROTECTED] To: [EMAIL PROTECTED] CC: [EMAIL PROTECTED], [EMAIL PROTECTED] Subject: Re: Artigo Java x C# Date: Wed, 03 Oct 2001 01:55:39 + 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
Re: [java-list] Re: Artigo Java x C#
Hear Hear Sergio ! Acho que até existe opção 3: Microsoft paga para este artigo?.. Não se fala mal de quem paga as contas. Mas sério fora que o artigo é malescrito se basea em coisas que não são verdade. Sven Sergio Oliveira Jr. wrote: Mauro, Eu te dei duas opções: 1) Vc está mentindo 2) Vc não sabe nada sobre Java Se vc optou pela alternativa 1), não há nada que eu possa fazer. Só quiz humildemente alertá-lo que comprar uma briga sem estar numa posição neutra e sem possuir informações corretas pode ser perigoso para a sua imagem profissional. Possuo 6 anos de experiência com a tecnologia Java e posso lhe afirmar que o seu artigo possui diversas afirmações incorretas, bizarras e suspeitas sobre a tecnologia java. -- Sergio Oliveira Jr. Sun Certified Java Programmer Desenvolvedor e Consultor Java -- From: Mauro Sant'Anna [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: Artigo Java x C# Date: Wed, 03 Oct 2001 00:24:44 + Caro senhor, O meu e-mail está disponível para críticas construtivas e esclarecimento de dúvidas, não para ofensas. Mente o senhor ao iniciar a mensagem com Com todo o respeito e a seguir me chamar de mentiroso. Sem mais, Mauro From: Sergio Oliveira Jr. [EMAIL PROTECTED] To: [EMAIL PROTECTED] CC: [EMAIL PROTECTED], [EMAIL PROTECTED] Subject: Artigo Java x C# Date: Wed, 03 Oct 2001 00:19:20 + Caro Mauro Sant'Anna, Com todo o respeito gostaria de lhe informar que o seu artigo sobre Java x C# possui diversos erros grotescos em relação a tecnologia Java. Isso demonstra que ou vc está mentindo para promover a tecnologia C# ou vc não sabe absolutamente nada sobre a tecnologia Java e nunca deveria ter escrito um artigo como esse. Eu não tenho nenhuma experiência com a tecnologia .Net, apenas sei que ela é a alternativa da Microsoft para o sucesso da linguagem Java no mercado. Portanto me limito a ficar calado quando o assunto é comparar C# com Java. Vc definitivamente deveria fazer o mesmo para não passar vergonha. -- Sergio Oliveira Jr. Sun Certified Java Programmer Desenvolvedor e Consultor Java -- _ Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp -- 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] - -- 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] Re: Artigo Java x C#
Title: RE: [java-list] Re: Artigo Java x C# 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 -- From: Mauro Sant'Anna [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: Artigo Java x C# Date: Wed, 03 Oct 2001 00:41:36 + Se você quizesse alertar-me, teria fornecido exemplos concretos e fatos ao invés de me chamar de ignorante/mentiroso. É incrível como as pessoas ficam valentes na frente de um teclado. Imagine se você teria a coragem de me dizer cara a cara o que você me escreveu, depois de uma comparação C# X Java em um eventual seminário da Microsoft - mais ou menos ou equivalente a um artigo no site da Microsoft. Mauro From: Sergio Oliveira Jr. [EMAIL PROTECTED] To: [EMAIL PROTECTED] CC: [EMAIL PROTECTED], [EMAIL PROTECTED] Subject: Re: Artigo Java x C# Date: Wed, 03 Oct 2001 00:35:27 + Mauro, Eu te dei duas opções: 1) Vc está mentindo 2) Vc não sabe nada sobre Java Se vc
RE: [java-list] Re: Artigo Java x C#
Completando: por valor, mas o valor pode ser uma referencia a um objeto. exemplo. em um metodo public Objeto getObjeto(); sera retornado a referencia ao Objeto. outro: public String teste. teste é referencia ao Objeto String e como nao foi instanciado aponta para NULL. se eu faco: teste = new String(eheheh); a referencia agora aponta para um objeto string cujo conteudo é eheheh; com o intuito de ajudar, Daniel A. At 09:52 03/10/01 -0300, [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 -- From: Mauro Sant'Anna [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: Artigo Java x C# Date: Wed, 03 Oct 2001 00:41:36 + Se você quizesse alertar-me, teria fornecido exemplos concretos e fatos ao invés de me chamar de ignorante/mentiroso. É incrível como as pessoas ficam valentes na frente de um teclado. Imagine se você teria a coragem de me dizer cara a cara o que você me escreveu, depois de uma comparação C# X
Re: [java-list] Re: Artigo Java x C#
Title: RE: [java-list] Re: Artigo Java x C# Na verdade java use pass by reference mas utiliza copias. Um possivel melhor performance um swap(a, b). Instanciao de classes em Java caro porem, passar referencias. Em Java seria: swap(array[], int int). Posso me imaginar que a maneira pass by reference mais rpido. [EMAIL PROTECTED] wrote: [EMAIL PROTECTED]"> Srgio, Eu gostaria de fazer uma pequena correo no seu email. Java no possui passagem por referncia. Somente por valor. Existe uma forma de "simular" passagem de parmetros por referncia, utilizando os objetos ou tipos primitivos armazenados em um array, por exemplo. Mas no existe passagem por referncia. Antes que o algum d pulinhos de alegria, eu pergunto: e qual o problema? Algum por favor, apresente um artigo demonstrativo, baseado em testes de performance ou de algum requisito que mostre qual o grandisssimo problema de Java utilizar passagem por valor, e no por referncia? Mesmo que haja, isso significa que Java ruim? Abraos, Denard -Original Message- From: Sergio Oliveira Jr. [ mailto:[EMAIL PROTECTED] ] Sent: tera-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, No era a minha intenso te tirar do srio. No 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 no ver nenhum problema em te encontrar para um papo mais descontrado. Alguns absurdos que vc escreveu: - Java no possui todos os tipos derivados de ancestral comum: Possui sim... Alm de possuir tipos primitivos mais leves, que por sua vez possuem suas classes equivalentes (Wrappers). Todas so derivadas da class Object. - Java no possui Structs: Realmente no possui a palavra Structs, mas ridculo simular um C Struct com uma class ou inner class. - Java no pode passar parametros por referencia: Todos os objetos Java so passados por referencia. Qualquer principiante em Java precisa saber disso. - Java no possui Propriedades: J ouviu falar em JavaBeans ??? Tb existe uma classe Properties que faz isso facilmente. - Java categoricamente no possui eventos nem delegate: Toda a GUI do Java orientada a eventos e a listeners. Java no possui ponteiros para funes, mas possui interfaces que podem facilmente e de uma forma mais elegante e poderosa realizar callbacks. - Java no possui Atributos: No sei o que vc quiz dizer com isso, mas Java possui uma API de Reflection poderosssima. - Java no possui Ponteiros: Ainda bem! Referencia = Ponteiro com a excesso que no podemos fazer operaes aritimticas com referencias. Todo mundo sabe que os ponteiros sempre foram a maior fonte de bugs, falhas de segurana, vrus e dores de cabea para os programadores C. - Java no possui Forech: loop para varrer arrays e colees D uma olhada na API Collections. Vc vai ficar impressionado com a qualidade, eficincia e performance dessa API. - Java no possui Campos readonly. Lgico que possui. Basta utilizar final. - Java no possui Documentao integrada em XML. Javadoc serve exatamente para isso que vc sugere como vantagem do C#. - Java no possui Controle sobre "estouro de faixa" numrica Lgico que possui. Pelo amor de Deus... - Java no possui Diretivas de compilao condicional (#ifdef etc) No precisa pois utilizando o final boolean DEBUG = false; o compilador automaticamente otimiza o cdigo compilado retirando esse cdigo morto. - Java no possui Padronizao por algum organismo internacional ??? J ouviu falar em Enterprise JavaBeans, Servlet, JSP, etc. Diversas empresas adotaram essas especificaes, independentemente de imposies da Sun. Apenas a Mquina Virtual da microsoft no era compatvel com todas as demais, da a derrota da Microsoft na justia. - Java no Chama APIs do Windows e DLLs Lgico que chama via JNI. Como voce percebe pelos meus comentrios acima. Vc definitivamente no a pessoa certa para fazer essa comparao entre C# e Java. A no ser que vc seja um homem de marketing e no da rea de TI. -- Sergio Oliveira Jr. Sun Certified Java Programmer Desenvolvedor e Consultor Java Empresa SmartJava -- From: "Mauro Sant'Anna" [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: Artigo Java x C# Date: Wed, 03 Oct 2001 00:41:36 + Se voc quizesse "alertar-me", teria fornecido exemplos concretos e fatos ao invs de me chamar de ignorante/mentiroso. incrvel como as pessoas ficam "valentes" na frente de um teclado. Imagine se voc teria a coragem de me dizer cara a cara o que voc me escreveu, depois de uma comparao C# X Java em um eventual seminrio
RE: [java-list] Re: Artigo Java x C#
Cara, vamos deixar claro: Tudo em java é passado por valor. MAS, você só mantém REFERENCIAS para objetos (ou pointeiros se achar melhor). Logo, todo objeto é passado por referencia visto que a referencia é que é passada por valor! Isso não implica de forma alguma em perda de performance, simplesmente significa que qq váriavel que você passar como paramêtro, se for modificada dentro do método invocado,não refletirá as mudanças quando o método retornar Como em: String s = test; int i = 1; mudeOsValores(s, i); System.out.println(s + 1); // == test1 Onde o metodo mudeOsValores contem o seguinte codigo public void mudeOsValores(String s, int i) { s = outracoisa; i = 2; } Ricardo Munhoz Santiago --- [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 -- From: Mauro
Re: [java-list] Re: Artigo Java x C#
A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] Re: Artigo Java x C# GEA2
Perae !!! Eh claro que refletira as mudancas !!! Apos ser chamado o metodo mudeOsValores() o inteiro e a String mandados por parametro terao seus valores mudados !!! Ou entao eu tou louco !!! Por que sempre foi assim pra mim ... --- Ricardo Santiago [EMAIL PROTECTED] escreveu: Cara, vamos deixar claro: Tudo em java é passado por valor. MAS, você só mantém REFERENCIAS para objetos (ou pointeiros se achar melhor). Logo, todo objeto é passado por referencia visto que a referencia é que é passada por valor! Isso não implica de forma alguma em perda de performance, simplesmente significa que qq váriavel que você passar como paramêtro, se for modificada dentro do método invocado,não refletirá as mudanças quando o método retornar Como em: String s = test; int i = 1; mudeOsValores(s, i); System.out.println(s + 1); // == test1 Onde o metodo mudeOsValores contem o seguinte codigo public void mudeOsValores(String s, int i) { s = outracoisa; i = 2; } Ricardo Munhoz Santiago --- [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
Re: [java-list] Re: Artigo Java x C#
Nain, nain. Java não tem passagem por referencia nem para objetos. Ex: public void inc(Integer i) { i = new Integer(i.intValue()++); System.out.println(i = + i); // i = 2 } i = new Integer(1); inc(i); System.out.println(i = + i); // i = 1 Resultado: i = 2 i = 1 Ao chamar inc(i) é passada uma referencia ao objeto i por valor.. ou seja, mudanças na referencia dentro do metodo não terão efeito fora dele.. []'s, Leonardo. - Original Message - From: Carlos E O Chierici [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 1:35 PM Subject: Re: [java-list] Re: Artigo Java x C# A passagem de parametros em Java funciona assim: - P/ objetos: por referencia - P/ primitivos: por valor Veja o exemplo: public class Teste { public void run() { TObj obj = new TObj(); obj .i = 3; System.out.println(obj.i); // obj.i = 3 NovoInt(obj); System.out.println(obj.i); // obj.i = 5 } public void NovoInt(TObj meuObj) { meuObj.i = 5; } public static void main(String args[]) { Teste t = new Teste(); t.run(); } } class TObj { public int i; } []s Carlos E O Chierici [EMAIL PROTECTED] - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, October 03, 2001 9:52 AM Subject: RE: [java-list] Re: Artigo Java x C# 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 -- 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] - -- 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] -