Advertisement
wagnermarques

Java: HistorinhaJavaPassaPorReferenciasPorValor

Oct 22nd, 2014
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.86 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package pacote;
  7.  
  8. /**
  9.  *
  10.  * @author administrador
  11.  * http://pastebin.com/p0LdkWLA
  12.  */
  13. public class HistorinhaJavaPassaPorReferenciasPorValor {
  14.  
  15.     /*
  16.      Tinha dois doces disponiveis na brincadeira.
  17.      Eram duas caixinhas, que tinha dois doces.        
  18.      O doce 1 (da caixinha 1) e o Doce 2 (da caixinha 2)
  19.      O doce 1 era o suspiro
  20.      O doce 2 era a cocada.        
  21.      Na brincadeira a criança escolhia uma caixinha e pegava o doce
  22.      que tava la dentro, mas nao dava pra ver qual doce estava em
  23.      qual caxinha
  24.      */
  25.     static Doce doce1;
  26.     static Doce doce2;
  27.  
  28.     static Crianca joaozinho;
  29.     static Crianca mariazinha;
  30.  
  31.     /**
  32.      * @param args the command line arguments
  33.      */
  34.     public static void main(String[] args) {
  35.  
  36.         doce1 = new Doce();
  37.         doce1.nomeDoDoce = "suspiro";        
  38.        
  39.        
  40.         doce2 = new Doce();
  41.         doce2.nomeDoDoce = "cocada";
  42.         System.out.println("doce1 = "+doce1 +" "+doce1.nomeDoDoce);
  43.         System.out.println("doce2 = "+doce2 +" "+doce2.nomeDoDoce);                
  44.         System.out.print("\n\n");
  45.         /*
  46.  
  47.          Tinha duas crianças participando da brincadeira
  48.          Joazinho e Mariazinha        
  49.          Eram o Joazinho e a Mariasinha        
  50.        
  51.          Joazinho gostava de suspiro e detestava cocada
  52.          Mariazinha gostava de cacada e destesva suspiro
  53.          */
  54.         joaozinho = new Crianca();
  55.         joaozinho.nomeDaCrianca = "joaozinho";
  56.         System.out.println("joaozinho = "+joaozinho);
  57.         mariazinha = new Crianca();
  58.         mariazinha.nomeDaCrianca = "mariazinha";
  59.         System.out.println("mariazinha = "+mariazinha);
  60.         System.out.print("\n\n");
  61.        
  62.         /*
  63.        
  64.          Joazinho, na brincadeira escolheu pegar o doce da caixinha 2
  65.          que he o doce2. Um azar, porque o doce2 he um cacada que ele detesta
  66.        
  67.          Sobrou pra mariazinha o doce1, que he a suspiro, que ela tambem detesta.
  68.                
  69.          */
  70.        
  71.         joaozinho.doce = doce2;        
  72.         mariazinha.doce = doce1;
  73.         System.out.println("antes de invocar quaisquer metodos de troca");
  74.         System.out.println("Lembrando que: joaozinho.doce = doce2; ");
  75.         System.out.println("Lembrando que: mariazinha.doce = doce1; ");        
  76.         System.out.println("joaozinho.doce = "+ joaozinho.doce +" "+joaozinho.doce.nomeDoDoce);
  77.         System.out.println("mariazinha.doce = "+ mariazinha.doce +" "+ mariazinha.doce.nomeDoDoce);
  78.         System.out.print("\n\n");
  79.        
  80.         /*
  81.          puts!!!
  82.          A primeira coisa que os espectadores dessa historia desejaram fazer era
  83.          mudar a historia,
  84.          fazendo com que
  85.          o doce2 fosse o suspiro ao inves da cocada
  86.          e o doce1 fosse a cocada ao inves do suspiro
  87.          */
  88.         System.out.println("agora vamos invocar o metodo \"trocarDoces(doce1, doce2);\"  \n");
  89.         trocarDoces(doce1, doce2);
  90.        
  91.         System.out.print("\n");
  92.         System.out.print("\n");
  93.         System.out.println("Depois da troca errada!");
  94.         System.out.println("joaozinho com o doce2 que he o " + joaozinho.doce.nomeDoDoce);
  95.         System.out.println("mariazinha com o doce1 que he o " + mariazinha.doce.nomeDoDoce);
  96.  
  97.         System.out.println("");
  98.         /**
  99.          * O problema he que pros espectadores mudram essa historia eles tem que
  100.          * saber como o java trabalha com a passagem por valor
  101.          */
  102.         trocarDocesCorretamente(joaozinho, mariazinha);
  103.  
  104.         System.out.print("\n");
  105.         System.out.print("\n");
  106.         System.out.println("Depois da troca correta!");
  107.         System.out.println("joaozinho tinha a referencia para o doce doce2 que foi realmente trocada para ref ao doce 1" + joaozinho.doce.nomeDoDoce);
  108.         System.out.println("mariazinha tinha a referencia para o doce1 que foi realmente trocada para referencia ao doce 2 " + mariazinha.doce.nomeDoDoce);
  109.  
  110.     }
  111.  
  112.     public static void trocarDoces(Doce doceUm, Doce doceDois) { //
  113.         //DoceUm he uma copia de doce1. Mariazinha esta com a copia doce1, lembra.
  114.         //alterar doceUm nao altera o que a mariazinha tem que he doce1.
  115.         //idem para o doceDois e doce2
  116.         System.out.println("estamos dentro do metodo trocarDoces");
  117.         System.out.println("DoceUm recebido = "+doceUm +" "+doceUm.nomeDoDoce);
  118.         System.out.println("DoceDois recebido = "+doceDois +" "+doceDois.nomeDoDoce);
  119.        
  120.         Doce temp = doceDois;
  121.         doceDois = doceUm;
  122.         doceUm = temp;
  123.        
  124.         System.out.println("apos a troca...");
  125.         System.out.println("DoceUm apos a troca = "+doceUm +" "+doceUm.nomeDoDoce);
  126.         System.out.println("DoceDois apos a troca = "+doceDois +" "+doceDois.nomeDoDoce);
  127.         System.out.println("Lembra que antes desse metodo ser chamado: joaozinho.doce = doce2; ");
  128.         System.out.println("Lembra que antes desse metodo ser chamado: mariazinha.doce = doce1; ");        
  129.         System.out.println("joaozinho.doce = "+ joaozinho.doce +" "+joaozinho.doce.nomeDoDoce);
  130.         System.out.println("mariazinha.doce = "+ mariazinha.doce +" "+mariazinha.doce.nomeDoDoce);
  131.         System.out.println("a troca entre as referencias entre as variaveis doceUm e doceDois aconteceu de fato");
  132.         System.out.println("mas nao aconteceu a troca dos doces das criancas, elas continuam tristes.");
  133.         System.out.println("a questao he que ...");
  134.         System.out.println("DoceUm recebeu uma copia da referencia do doce1, mas nao he o doce1 ");
  135.         System.out.println("DoceDois recebeu uma copia da referencia do doce2, mas nao he o doce2 ");
  136.         System.out.println("trabalhar com doceUm e doceDois nao he trabalhar com doce1 e doce1");
  137.         System.out.println("vamos ver se he isso mesmo?");
  138.         System.out.println("");
  139.        
  140.        
  141.         System.out.println("Vamos entao fazer a troca entre as variaveis originais doce1 e doce2");
  142.         System.out.println("o estado de doce1 e doce2, antes da troca he...");
  143.         System.out.println("doce1 = "+doce1 +" "+doce1.nomeDoDoce);
  144.         System.out.println("doce2 = "+doce2 +" "+doce2.nomeDoDoce);                
  145.                
  146.         Doce temp2 = doce2;
  147.         doce2 = doce1;
  148.         doce1 = temp;        
  149.        
  150.         System.out.println("agora depois da troca feita...");
  151.         System.out.println("doce1 = "+doce1 +" "+doce1.nomeDoDoce);
  152.         System.out.println("doce2 = "+doce2 +" "+doce2.nomeDoDoce);                
  153.         System.out.println("agora vamos ver se as criancas estao com seus doces trocadas...");
  154.         System.out.println("joaozinho.doce = "+ joaozinho.doce +" "+joaozinho.doce.nomeDoDoce);
  155.         System.out.println("mariazinha.doce = "+ mariazinha.doce +" "+mariazinha.doce.nomeDoDoce);
  156.         System.out.println("Caramba, troquei as variaveis originais, as mesmas que joaozinho e mariainha recebeu e nao deu certo!!!");
  157.         System.out.println("as criancas continuam tristes e talvez você tambem porque nao ta conseguindo trocar os doces das crianças com java");
  158.         System.out.println("qual he a explicacao agora?");
  159.         System.out.println("he que as criancas receberam nao foi a variavel, foi uma copia do endereco que a variavel apontava");
  160.         System.out.println("lembre-se, aproveite e decore isso pra facilitar sua vida:");
  161.         System.out.println("JAVA PASSA POR VALOR E POR ISSO QUEM RECEBE RECEBE UMA COPIA DA REFERENCIA DA VARIAVEL ORIGINAL");
  162.         System.out.println("entao alterar as variaveis originais nao altera a copia delas nos objetos criancas.");
  163.         System.out.println("pense bem que faz sentido pessoal: variavel he pra guardar um valor");
  164.         System.out.println("mas quem guarda o valor mesmo nao he a variavel he a memoria de modo que "
  165.                 + "a variavel guarda mesmo he so o endereco de acesso ao valor na memoria");                        
  166.         System.out.println("tanto he que o endereco da memoria do doce de cada uma das criancas he o mesmo");        
  167.         System.out.println("");
  168.     }
  169.  
  170.     private static void trocarDocesCorretamente(Crianca joaozinhoCopia , Crianca mariazinhaCopia) {
  171.         //Agora joazinho he uma copia do mesmo joazinho, nao he a mesma referencia, mas he uma copia
  172.         //da referencia que aponta pro mesmo joazinho da historia.
  173.         //cada espectador tem uma copia da referencia dos personagens da historia
  174.         //se o espectadore mecher na sua referencia, ele meche no personagem da historia de verdade
  175.        
  176.         Doce temp = joaozinhoCopia.doce;
  177.         joaozinhoCopia.doce = mariazinhaCopia.doce;
  178.         mariazinhaCopia.doce = temp;                
  179.     }
  180.  
  181. }//class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement