Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






 

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

 

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);

 

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.