Posso mudar o valor de um parâmetro em Java

Resposta direta: Não! 😛

Em Java, um parâmetro sempre é passado por valor (e não por referência). Ou seja, se eu fizer um código assim:

public class Main {
      public static void inc(int i) {
             i++;
      }
      public static void main(String args[]) {
            int a = 0;
            System.out.println(“Valor de a : ” + a);
            inc(a);
            System.out.println(“Valor de a : ” + a);
      }
}

O que será exibido na tela é:
Valor de a : 0
Valor de a : 0

O mesmo vale para uma String:

public class Main {
      public static void helloWorld(String str) {
             str += “ Hello World”;
      }
      public static void main(String args[]) {
            String s = “Alo mundo”;
            System.out.println(s);
            helloWorld(s);
            System.out.println(s);
      }
}

Tela:
Alo mundo
Alo mundo

Ou seja, o valor da variável passada por parametro não muda depois que você retorna para a função que o chamou

Mas existe um jeito de contornar isso! 🙂

Podemos usar classes que possuem funções e/ou atributos que modificam o estado inicial de um objeto (hã, o que é isso???).

Para facilitar, vejamos o exemplo a seguir:

public class Main {
      public static void helloWorld(StringBuilder str) {
             str.append(“ Hello World”);
      }
      public static void main(String args[]) {
            StringBuilder s = new StringBuilder(“Alo mundo”);
            System.out.println(s);
            helloWorld(s);
            System.out.println(s);
      }
}

Quando você executar, verá algo assim:
Alo mundo
Alo mundo Hello World

A mesma coisa acontece se eu criar um atributo inteiro em uma classe:
class MutableInteger {
         public int i = 0;
         public String toString() {
                 return String.valueOf(i);
         }       
}
E incrementar este na função, passando um objeto instanciado desta: 

public class Main {
      public static void inc(MutableInteger b) {
             b.i++;
      }
      public static void main(String args[]) {
            MutableInteger a = new MutableInteger();
            System.out.println(“Valor de a : ” + a);
            inc(a);
            System.out.println(“Valor de a : ” + a);
      }
}

E o que será exibido é:

Valor de a : 0
Valor de a : 1

Uau! Que coisa estranha 😛

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.