Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65

Передача объектов методу по ссылке

05.07.2016, 10:03. Показов 1666. Ответов 9

Студворк — интернет-сервис помощи студентам
Я не совсем понимаю, если объект передаётся методу в качестве аргумента только по ссылке и в отличии от простых типов данных всегда
изменения объекта внутри метода отражаются на нём же вне метода. Исходя из этого получается что метод 1 и метод 2 одинаково изменяют объект? Вопрос: «Я специально создал два одинаковых объекта. Объект 1 прогнал через метод 1, а объект 2 прогнал через метод 2. Будут ли эти два объекта одинаковыми после обработки в методах 1 и 2 и одинаковы ли эти 2 метода?»
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Testbox
{
    int width;
    int height;
    int depth;
    Testbox(int w, int h, int d)
    {
        width = w;
        height = h;
        depth = d;
    }
    void resizebox(int wr, int hr, int dr) // Метод 1.
    {
        width += wr;
        height += hr;
        depth += dr;
    }
    Testbox resizebox(Testbox o, int wr, int hr, int dr) // Метод 2.
    {
        o.width += wr;
        o.height += hr;
        o.depth += dr;
        return o;
    }
    Testbox box1 = new Testbox(3, 4, 5);  // Объект 1.
    Testbox box2 = new Testbox(3, 4, 5);  // Объект 2.
    public void calltestbox()
    {
        box1.resizebox(6, 7, 8); // Обработка объекта 1 в метод 1.
        box2.resizebox(box2, 6, 7, 8);  // Обработка объекта 2 в методе 1.
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.07.2016, 10:03
Ответы с готовыми решениями:

Передача ArrayList в качестве параметра методу, и в дальнейшем получение свойств объектов которые хранятся в ArrayList
Всем привет. Задача следующая: a. Есть классы Fruit -> Apple, Orange;(больше фруктов не надо) b. Класс Box в который можно складывать...

Как передать методу параметры базового типа по ссылке?
Как написано в книге при передаче параметров базовый тип передается по значению, а объект-по ссылке. Пож-ста,объясните, как передать...

Передача параметров методу
Как сделать проверку типа значения, передаваемого в метод? Если я введу "do 2 5", то будет все хорошо (неважно что лежит внутри do),...

9
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
05.07.2016, 10:18
Цитата Сообщение от kokzahvas Посмотреть сообщение
Будут ли эти два объекта одинаковыми после обработки в методах 1 и 2 и одинаковы ли эти 2 метода?
почему бы вам не запустить этот код и не проверить?
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
05.07.2016, 10:52
kokzahvas,
Цитата Сообщение от kokzahvas Посмотреть сообщение
Я специально создал два одинаковых объекта
"...братва только на пальцАх рубит..."(с) Вот смотрите, аналогия: есть некий чертёж, согласно которому изготавливается сначала развёртка коробки, потом уже непосредственно коробка. Теперь по коду: Ваш класс Testbox - чертёж, как вырезать развёртку коробки; Testbox box1 - уже вырезанная (это так и называется - экземпляр объекта) развёртка. Потом там методы "согнуть", "склеить" - не суть важно - уже модифицируют развёртку. Вопрос: две развёртки коробок, вырезанные по одному чертежу, это одно и то же или это разные вещи? Вот то-то... Кстати чтобы убедиться напишите себе где-нибудь строчки типа
Java
1
System.out.println(box1.hashCode());
и уже там подставляйте box2, box3, ... boxN.
0
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
05.07.2016, 12:21  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
почему бы вам не запустить этот код и не проверить?
Я пишу в AIDE и пока не понял, как в методе Main запустить метод из другого класса. Я думал вы мне подкажите, как лучше создать методы для обработки объектов, с объектами в качестве аргументов или без?
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
05.07.2016, 12:25
Цитата Сообщение от kokzahvas Посмотреть сообщение
как в методе Main запустить метод из другого класса. Я думал вы мне подкажите, как лучше создать методы для обработки объектов, с объектами в качестве аргументов или без?
Так а книгу по джаве пробовали читать? Там, говорят, есть такая информация.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
05.07.2016, 12:42
kokzahvas, аргументы в функции передаются по значению. объект - это ссылка. передав ссылку по значению вы не разорвали ее связь с объектом. то есть из функции вы можете модифицировать объект.
1
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
05.07.2016, 13:06  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
kokzahvas, аргументы в функции передаются по значению. объект - это ссылка. передав ссылку по значению вы не разорвали ее связь с объектом. то есть из функции вы можете модифицировать объект.
А метод 1, который ничего не возвращает и метод 2, который возвращает объект одинаково изменяют объект? Чем эти два метода отличаются?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
05.07.2016, 13:10
Цитата Сообщение от kokzahvas Посмотреть сообщение
Чем эти два метода отличаются?
вызов box1.resizebox(6, 7, 8) изменяет объект box1
вызов box2.resizebox(box2, 6, 7, 8) изменяет объект box2
для примера
вызов box1.resizebox(box2, 6, 7, 8) так же изменяет объект box2 - вообще в данном случае функция может быть статической

Добавлено через 39 секунд
...факт возврата объекта ничего не меняет
0
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 65
05.07.2016, 13:39  [ТС]
Я изменил код и выявил странность. Строки 33 - 38 доказывают что оба объекта изменились одинаково, однако строки 40 и 41 выводят разный хэш-код. Почему?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.util.*;
public class Main
{
    int width;
    int height;
    int depth;
    Main(int w, int h, int d)
    {
        width = w;
        height = h;
        depth = d;
    }
    void resize(int wr, int hr, int dr)
    {
        width += wr;
        height += hr;
        depth += dr;
    }
    Main resize(Main o, int wr, int hr, int dr)
    {
        o.width += wr;
        o.height += hr;
        o.depth += dr;
        return o;
    }
    public static void main(String[] args)
    {
        Main obj1 = new Main(3, 4, 5);
        Main obj2 = new Main(3, 4, 5);
        obj1.resize(6, 7, 8);
        obj2.resize(obj2, 6, 7, 8);
        // Следующие 6 строк доказывают, что объекты obj1 и obj2 изменились одинаково.
        System.out.println("obj1.width =" + obj1.width);
        System.out.println("obj1.height =" + obj1.height);
        System.out.println("obj1.depth =" + obj1.depth);
        System.out.println("obj2.width =" + obj2.width);
        System.out.println("obj2.height =" + obj2.height);
        System.out.println("obj2.depth =" + obj2.depth);
        // Но хеш-коды у них разные. Странно.
        System.out.println(obj1.hashCode());
        System.out.println(obj2.hashCode());
    }
}
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
05.07.2016, 13:44
Лучший ответ Сообщение было отмечено kokzahvas как решение

Решение

Цитата Сообщение от kokzahvas Посмотреть сообщение
однако строки 40 и 41 выводят разный хэш-код. Почему?
потому что вы не переопределили hash() а по дефолту это хеш класса Object. Объекты у вас разные поэтому хеши их тоже разные
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2016, 13:44
Помогаю со студенческими работами здесь

Передача строкового значения методу
Есть метод static boolean isHello(String arg) { String work = arg; work = work.toLowerCase(); if (work.contains("hi") ||...

Передача объекта методу в качестве параметра
Читаю учебник по Java, и видно, пропустил что-то, и теперь не могу понять, что за содомия происходит при передаче объекта t в метод...

Передача параметров методу абстрактного класса с интерфейсом
Доброго времени суток!У меня есть интерфейс с методом T create( T Object ); есть абстрактный класс,который наследует этот интерфейс там я...

Передача значений по ссылке
Можно ли передавать значения по ссылке. У меня есть несколько ссылок на один и тот же файл, только я хочу что бы по первой ссылке...

Передача типа значения по ссылке
Существует ли Java нечто подобное на fef/out в C# (var в Delphi)?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. На мобильном - сканируйте QR-код. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru