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
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... :P
Até mais!
Nenhum comentário:
Postar um comentário