Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package pacote;
- /**
- *
- * @author administrador
- * http://pastebin.com/p0LdkWLA
- */
- public class HistorinhaJavaPassaPorReferenciasPorValor {
- /*
- Tinha dois doces disponiveis na brincadeira.
- Eram duas caixinhas, que tinha dois doces.
- O doce 1 (da caixinha 1) e o Doce 2 (da caixinha 2)
- O doce 1 era o suspiro
- O doce 2 era a cocada.
- Na brincadeira a criança escolhia uma caixinha e pegava o doce
- que tava la dentro, mas nao dava pra ver qual doce estava em
- qual caxinha
- */
- static Doce doce1;
- static Doce doce2;
- static Crianca joaozinho;
- static Crianca mariazinha;
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) {
- doce1 = new Doce();
- doce1.nomeDoDoce = "suspiro";
- doce2 = new Doce();
- doce2.nomeDoDoce = "cocada";
- System.out.println("doce1 = "+doce1 +" "+doce1.nomeDoDoce);
- System.out.println("doce2 = "+doce2 +" "+doce2.nomeDoDoce);
- System.out.print("\n\n");
- /*
- Tinha duas crianças participando da brincadeira
- Joazinho e Mariazinha
- Eram o Joazinho e a Mariasinha
- Joazinho gostava de suspiro e detestava cocada
- Mariazinha gostava de cacada e destesva suspiro
- */
- joaozinho = new Crianca();
- joaozinho.nomeDaCrianca = "joaozinho";
- System.out.println("joaozinho = "+joaozinho);
- mariazinha = new Crianca();
- mariazinha.nomeDaCrianca = "mariazinha";
- System.out.println("mariazinha = "+mariazinha);
- System.out.print("\n\n");
- /*
- Joazinho, na brincadeira escolheu pegar o doce da caixinha 2
- que he o doce2. Um azar, porque o doce2 he um cacada que ele detesta
- Sobrou pra mariazinha o doce1, que he a suspiro, que ela tambem detesta.
- */
- joaozinho.doce = doce2;
- mariazinha.doce = doce1;
- System.out.println("antes de invocar quaisquer metodos de troca");
- System.out.println("Lembrando que: joaozinho.doce = doce2; ");
- System.out.println("Lembrando que: mariazinha.doce = doce1; ");
- System.out.println("joaozinho.doce = "+ joaozinho.doce +" "+joaozinho.doce.nomeDoDoce);
- System.out.println("mariazinha.doce = "+ mariazinha.doce +" "+ mariazinha.doce.nomeDoDoce);
- System.out.print("\n\n");
- /*
- puts!!!
- A primeira coisa que os espectadores dessa historia desejaram fazer era
- mudar a historia,
- fazendo com que
- o doce2 fosse o suspiro ao inves da cocada
- e o doce1 fosse a cocada ao inves do suspiro
- */
- System.out.println("agora vamos invocar o metodo \"trocarDoces(doce1, doce2);\" \n");
- trocarDoces(doce1, doce2);
- System.out.print("\n");
- System.out.print("\n");
- System.out.println("Depois da troca errada!");
- System.out.println("joaozinho com o doce2 que he o " + joaozinho.doce.nomeDoDoce);
- System.out.println("mariazinha com o doce1 que he o " + mariazinha.doce.nomeDoDoce);
- System.out.println("");
- /**
- * O problema he que pros espectadores mudram essa historia eles tem que
- * saber como o java trabalha com a passagem por valor
- */
- trocarDocesCorretamente(joaozinho, mariazinha);
- System.out.print("\n");
- System.out.print("\n");
- System.out.println("Depois da troca correta!");
- System.out.println("joaozinho tinha a referencia para o doce doce2 que foi realmente trocada para ref ao doce 1" + joaozinho.doce.nomeDoDoce);
- System.out.println("mariazinha tinha a referencia para o doce1 que foi realmente trocada para referencia ao doce 2 " + mariazinha.doce.nomeDoDoce);
- }
- public static void trocarDoces(Doce doceUm, Doce doceDois) { //
- //DoceUm he uma copia de doce1. Mariazinha esta com a copia doce1, lembra.
- //alterar doceUm nao altera o que a mariazinha tem que he doce1.
- //idem para o doceDois e doce2
- System.out.println("estamos dentro do metodo trocarDoces");
- System.out.println("DoceUm recebido = "+doceUm +" "+doceUm.nomeDoDoce);
- System.out.println("DoceDois recebido = "+doceDois +" "+doceDois.nomeDoDoce);
- Doce temp = doceDois;
- doceDois = doceUm;
- doceUm = temp;
- System.out.println("apos a troca...");
- System.out.println("DoceUm apos a troca = "+doceUm +" "+doceUm.nomeDoDoce);
- System.out.println("DoceDois apos a troca = "+doceDois +" "+doceDois.nomeDoDoce);
- System.out.println("Lembra que antes desse metodo ser chamado: joaozinho.doce = doce2; ");
- System.out.println("Lembra que antes desse metodo ser chamado: mariazinha.doce = doce1; ");
- System.out.println("joaozinho.doce = "+ joaozinho.doce +" "+joaozinho.doce.nomeDoDoce);
- System.out.println("mariazinha.doce = "+ mariazinha.doce +" "+mariazinha.doce.nomeDoDoce);
- System.out.println("a troca entre as referencias entre as variaveis doceUm e doceDois aconteceu de fato");
- System.out.println("mas nao aconteceu a troca dos doces das criancas, elas continuam tristes.");
- System.out.println("a questao he que ...");
- System.out.println("DoceUm recebeu uma copia da referencia do doce1, mas nao he o doce1 ");
- System.out.println("DoceDois recebeu uma copia da referencia do doce2, mas nao he o doce2 ");
- System.out.println("trabalhar com doceUm e doceDois nao he trabalhar com doce1 e doce1");
- System.out.println("vamos ver se he isso mesmo?");
- System.out.println("");
- System.out.println("Vamos entao fazer a troca entre as variaveis originais doce1 e doce2");
- System.out.println("o estado de doce1 e doce2, antes da troca he...");
- System.out.println("doce1 = "+doce1 +" "+doce1.nomeDoDoce);
- System.out.println("doce2 = "+doce2 +" "+doce2.nomeDoDoce);
- Doce temp2 = doce2;
- doce2 = doce1;
- doce1 = temp;
- System.out.println("agora depois da troca feita...");
- System.out.println("doce1 = "+doce1 +" "+doce1.nomeDoDoce);
- System.out.println("doce2 = "+doce2 +" "+doce2.nomeDoDoce);
- System.out.println("agora vamos ver se as criancas estao com seus doces trocadas...");
- System.out.println("joaozinho.doce = "+ joaozinho.doce +" "+joaozinho.doce.nomeDoDoce);
- System.out.println("mariazinha.doce = "+ mariazinha.doce +" "+mariazinha.doce.nomeDoDoce);
- System.out.println("Caramba, troquei as variaveis originais, as mesmas que joaozinho e mariainha recebeu e nao deu certo!!!");
- System.out.println("as criancas continuam tristes e talvez você tambem porque nao ta conseguindo trocar os doces das crianças com java");
- System.out.println("qual he a explicacao agora?");
- System.out.println("he que as criancas receberam nao foi a variavel, foi uma copia do endereco que a variavel apontava");
- System.out.println("lembre-se, aproveite e decore isso pra facilitar sua vida:");
- System.out.println("JAVA PASSA POR VALOR E POR ISSO QUEM RECEBE RECEBE UMA COPIA DA REFERENCIA DA VARIAVEL ORIGINAL");
- System.out.println("entao alterar as variaveis originais nao altera a copia delas nos objetos criancas.");
- System.out.println("pense bem que faz sentido pessoal: variavel he pra guardar um valor");
- System.out.println("mas quem guarda o valor mesmo nao he a variavel he a memoria de modo que "
- + "a variavel guarda mesmo he so o endereco de acesso ao valor na memoria");
- System.out.println("tanto he que o endereco da memoria do doce de cada uma das criancas he o mesmo");
- System.out.println("");
- }
- private static void trocarDocesCorretamente(Crianca joaozinhoCopia , Crianca mariazinhaCopia) {
- //Agora joazinho he uma copia do mesmo joazinho, nao he a mesma referencia, mas he uma copia
- //da referencia que aponta pro mesmo joazinho da historia.
- //cada espectador tem uma copia da referencia dos personagens da historia
- //se o espectadore mecher na sua referencia, ele meche no personagem da historia de verdade
- Doce temp = joaozinhoCopia.doce;
- joaozinhoCopia.doce = mariazinhaCopia.doce;
- mariazinhaCopia.doce = temp;
- }
- }//class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement