Bir fonksiyon içine geçirilen değerin fonksiyonun dışında da değişeceği yönteme denir.
Yani açıklayalım.
public class Test {
public void buyukluk(List<String> a) {
System.out.print(a.size());
}
private static void test(List<String> x) {
x.add("Test");
}
public static void main(String... args) {
ArrayList<String> a = new ArrayList<>();
buyukluk(a);
test(a);
buyukluk(a);
}
}
Burada main metodumuzu konuşalım. a diye bir değişkenimiz var ve bu bir arraylist. Büyüklüğüne bakıyoruz sonuc 0 olacaktır. Sonra test metodunun içine a değişkenini geçiriyoruz ve test metodunda da a'nın içine bir değer ekliyoruz. Daha sonradan a'nın büyüklüğüne bakarsak bunun 1 olduğunu göreceğiz. Peki buradan ne anlamamız gerekecek? x ile a hafızadaki aynı arraylist'i görüyorlar. x'e birşey eklemek aslında a'ya eklemekle aynı şey. Java da sınıf bazlı değişkenlerde (string hariç) bir metodun içine her zaman o metodun pointer benzeri bir bilgisi geçirilir.
Şayet a değişkeni bir int olsaydı ne olacaktı. int sınıf bazlı bir değişken olmadığı için a'nın değeri değişmeyecekti. Neden? Çünkü; test(a) dediğimiz zaman, farz edelim ki a = 5, x = 5 olacaktı. Biz x üzerinde bir değişiklik yapsak bile x değişecekti, a aynı kalacaktı. Halbuki arraylist olunca arraylist'in sanki bir pointerını yollamış gibi olduk.