Передача объекта методу

При вызове метода формальным параметрам присваивается значение фактических параметров:

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); // формальному параметру y присвоится значение фактического х

System.out.println (“2:x.c: ” + x.c);//изменилось поле объекта х!!!!!

}

}

Ссылки на y и x стали указывать на один и тот же объект. Т.е. после вызова метода объект х изменился!!!!!

Объекты фактически предаются по ссылке, т.е. передается копия ссылки- методы могут изменять объекты-параметры.

Примитивы передаются по значению, т.е. передается копия значения - методы не могут изменять примитивы-параметры.

Проверка объектов на равенство

Операторы = = и!= для объектов сравнивают ссылки.

Нельзя установить ими равенство содержимого объектов.

public class Equivalence {

public static void main (String[] args){

Integer n1 = new Integer (47);

Integer n2 = new Integer (47);

System.out.println (n1 == n2); // false

System.out.println (n1!= n2); // true

}

}

Содержимое объектов сравнивается методом equals(). Это метод класса Object.

System.out.println(n1.equals(n2)); //true

В библиотечных классах он реализован (переопределен). В собственных классах наследуется от Object, сравнивает ссылки, его нужно переопределять самому разработчику.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: