Философия Java

Эффект наложения при вызове методов


Эффект наложения также случается при передаче объектов в метод:

//: c03:PassObject.java

// Передача объектов в метод может быть не тем,

// что вы использовали.

class Letter { char c; }

public class PassObject { static void f(Letter y) { y.c = 'z'; } public static void main(String[] args) { Letter x = new Letter(); x.c = 'a'; System.out.println("1: x.c: " + x.c); f(x); System.out.println("2: x.c: " + x.c); } } ///:~

Во многих языках программирования для метод f( ) ожидается создание копии его аргумента Letter y внутри границ этого метода. Но так как передается ссылка, то строка

y.c = 'z';

на самом деле меняет объект внутри f( ). Вывод покажет следующее:

1: x.c: a 2: x.c: z

Эффект наложение и его решение - это сложная проблема, хотя вы должны ждать до Приложения А ответов на все вопросы, вы должны знать об этом свойстве, чтобы могли найти все ловушки.



Содержание раздела