16 Nisan 2015 Perşembe

Java ve pass-by-value

Java'da daima pass-by-value yöntemiyle parametre verilir.
Yani bir metoda parametre verildiğinde, metodun aldığı şey yalnızca o nesneye işaret eden yeni bir referans tipidir.
Örneğin bir book referansı bir metoda parametre olarak verildiğinde, metod içerisine aslında bu referansın bir kopyası alınır.
Bu yeni referans book ile aynı nesneye işaret ettiğinden, nesne üzerinde değişiklik yapabilir.
Ama metod içinde bu referansa new keywordu ile yeni bir nesne yaratılırsa, referans artık bellekte başka bir adresi işaret eder.
Orijinal book referansı bozulmadığından bu yeni nesnede yapılan hiçbir değişiklik book referansını etkilemez.
İşte bu örnekte de görüldüğü gibi Java'da pass-by-referans yoktur, daima pass-by-value vardır.


public class Library {

    public static void main(String[] args) {
        Book book = new Book();
        book.setName("original name");
        System.out.println(book);
        change(book);
        System.out.println(book);
    }

    public static void change(Book book) {
        book.setName("name changed!");
        book = new Book();
        book.setName("another name");
    }

    public static class Book {

        private String name;

        public Book() {
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Book{" + "name=" + name + '}';
        }

    }

}

C++, Ada, Pascal gibi dillerde pass-by-value olduğundan bir metoda parametre olarak verilen değişkenin kendisini değiştirmek mümkündür. Java'da ise bu mümkün değildir.

Hiç yorum yok:

Yorum Gönder