Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Передача объекта методу
При вызове метода формальным параметрам присваивается значение фактических параметров:
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, сравнивает ссылки, его нужно переопределять самому разработчику.
Вызов методов
Пусть в классе Arrays есть статический метод, умножающий массив на число.
public static void multiples (int [] a, int m) { if (a=null) return;
for (int i=0; i< a.lenght; i++) { a[i] = a[i]*m; } }
Участок кода
1. int [] b = {1, 3, 5, 7, 9}; 2. Arrays.multiples (b, 2);
|