Для начинающего программиста вопрос "Как передаются параметры в метод ?" нередко вызывает сложности. Для чёткого понимания, что и как, и предназначен это ролик.
Я почти уверен что тема проще самого объяснения. К сожалению на данный момент толкового исчерпывающего объяснения не встретил. Тащу мысли по чуть чуть из разных источников
Когда познакомился как работает стэк и хип, вообще порядок работы jvm с кодом, многое прояснилось. Есть стэк, куда попадает входная точка метод Мэйн, и уже следом параметры метода, а значения этих параметров записываются в стэк, вот только примитивы записываются непосредственно в стэк и поэтому они копируются полностью и независимы от предыдущих переменных, а объект это тяжёлая структура которая находится в хипе и в стэк записывается только ссылка на область в хипе где лежит этот объект. Поэтому если мы в методе поменяем значение отданного в параметре этого метода, мы лишь перезапишем ссылку на реальный объект внутри метода
Потому что обертка может иметь значение NULL. Это бывает очень удобно - NULL очень специфическое значение. Например для модификации записи в базе данных - если первичный ключ NULL, то запись новая и надо ее добавить. Если не NULL - изменить существующую.
public class Main { public static void main(String[ ] args) { int [ ] arr = {1,2,3}; System.out.println(Arrays.toString(arr)); func(arr); System.out.println(Arrays.toString(arr));
Спасибо большое. А в чем будет отличие если например мы скажем что у нас значения копироваться будут не по значению а по ссылке?Заранее спасибо если ответите
В Java вообще нет передачи по ссылке. Иначе не настраивается. Совсем. Все параметры копируются в друзе переменные такого же типа. Такое есть в C/C++ - там надо указывать, по значению или по ссылке. Если не боитесь запутаться - по сути в C/C++ передача по ссылке похожа на копирование ссылки в Java. Но если эта фраза Вас путает - забудьте :)
@@java8599 просто как вы сказали и везде пишут что в Java все передается по значению с этим я разобрался. А вот что значит передача по ссылке так и не понял до конца, и пока к сожалению этот вопрос для меня загадка
@@AS-nu7ez Передача по ссылке появилась в связи с тем, что в языках типа С структура создавалась не только динамически, но и статически (грубовато, но по сути точно). Т.е. объявляя переменную сложной структуры, вы СРАЗУ получали готовую структуру. Ее не надо было создавать через вызов NEW, как в Java. И поэтому появилось два варианта передачи данных в метод: 1) Копирование ВСЕЙ структуры (есть у вас 5 полей - все и копируются). Это и есть передача КОПИРОВАНИЕМ. По сути создается копия передаваемых данных, которая не связана с оригиналом совсем. 2) По ссылке. По сути копировалась именно ссылка, как указатель (в терминах С) на нужную структуру/объект. В Java ВСЕ объекты (не элементарных типов) создаются в динамической памяти и на них ВСЕГДА указывает именно ссылка. У вас нет вообще переменной типа Date или StringBuilder. Есть ТОЛЬКО ссылка на созданный объект. И значит при передачи ССЫЛКИ вы ее КОПИРУЕТЕ. Как и в С в случае передачи по ссылке. Вот такой вот парадоксальных вариант. Как бы всегда копируем, но в случае со ссылкой Java подобна С, который называет это передачу "передача по ссылке".
перевернул весь интернет, везде информация какая то неполная, только благодаря вашему видео понял до конца как работает передачу параметров.
спасибо.
Cпасибо большое за наглядное видео! Дошло только благодаря вам))
Это лучшее обьяснение!
Спасибо) жду новых видео по Java
Спасибо! Все встало на свои места)
Огромное спасибо, супер понятно теперь!
Добрый вечер.Благодарю за урок.БОЛЬШОЕ СПАСИБО.
Классно, когда есть такие понятные объяснения! Спасибо за Ваш труд
Спасибо, очень наглядно и понятно!
Хорошее видео! Разнообразные примеры, это профессионально)
Шикарное видео!!! Большое спасибо.
спасибо
Я почти уверен что тема проще самого объяснения. К сожалению на данный момент толкового исчерпывающего объяснения не встретил. Тащу мысли по чуть чуть из разных источников
Очень круто когда объяснение кода сопровождается визуальной абстракцией
Спасибо. Очень исчерпывающее видео
50% зашло, остальное будем разбираться...
Когда познакомился как работает стэк и хип, вообще порядок работы jvm с кодом, многое прояснилось. Есть стэк, куда попадает входная точка метод Мэйн, и уже следом параметры метода, а значения этих параметров записываются в стэк, вот только примитивы записываются непосредственно в стэк и поэтому они копируются полностью и независимы от предыдущих переменных, а объект это тяжёлая структура которая находится в хипе и в стэк записывается только ссылка на область в хипе где лежит этот объект. Поэтому если мы в методе поменяем значение отданного в параметре этого метода, мы лишь перезапишем ссылку на реальный объект внутри метода
отличная подача, спасибо!
Подушню, передаются аргументы, а не параметры. Это разные понятия.
Большое спасибо.
Скажите, пожалуйста, почему Вы во многих своих примерах используете классы-обёртки вместо простейших типов данных?
Потому что обертка может иметь значение NULL. Это бывает очень удобно - NULL очень специфическое значение. Например для модификации записи в базе данных - если первичный ключ NULL, то запись новая и надо ее добавить. Если не NULL - изменить существующую.
public class Main {
public static void main(String[ ] args) {
int [ ] arr = {1,2,3};
System.out.println(Arrays.toString(arr));
func(arr);
System.out.println(Arrays.toString(arr));
}
public static void func (int[ ]arr){
System.out.println(Arrays.toString(arr));
arr[0] = 9;
System.out.println(Arrays.toString(arr));
}
}
[1, 2, 3]
[1, 2, 3]
[9, 2, 3]
[9, 2, 3]
Так я ничего и не понял.....
Спасибо большое. А в чем будет отличие если например мы скажем что у нас значения копироваться будут не по значению а по ссылке?Заранее спасибо если ответите
В Java вообще нет передачи по ссылке. Иначе не настраивается. Совсем. Все параметры копируются в друзе переменные такого же типа.
Такое есть в C/C++ - там надо указывать, по значению или по ссылке. Если не боитесь запутаться - по сути в C/C++ передача по ссылке похожа на копирование ссылки в Java. Но если эта фраза Вас путает - забудьте :)
@@java8599 просто как вы сказали и везде пишут что в Java все передается по значению с этим я разобрался. А вот что значит передача по ссылке так и не понял до конца, и пока к сожалению этот вопрос для меня загадка
@@AS-nu7ez Передача по ссылке появилась в связи с тем, что в языках типа С структура создавалась не только динамически, но и статически (грубовато, но по сути точно). Т.е. объявляя переменную сложной структуры, вы СРАЗУ получали готовую структуру. Ее не надо было создавать через вызов NEW, как в Java. И поэтому появилось два варианта передачи данных в метод:
1) Копирование ВСЕЙ структуры (есть у вас 5 полей - все и копируются). Это и есть передача КОПИРОВАНИЕМ. По сути создается копия передаваемых данных, которая не связана с оригиналом совсем.
2) По ссылке. По сути копировалась именно ссылка, как указатель (в терминах С) на нужную структуру/объект.
В Java ВСЕ объекты (не элементарных типов) создаются в динамической памяти и на них ВСЕГДА указывает именно ссылка. У вас нет вообще переменной типа Date или StringBuilder. Есть ТОЛЬКО ссылка на созданный объект. И значит при передачи ССЫЛКИ вы ее КОПИРУЕТЕ.
Как и в С в случае передачи по ссылке. Вот такой вот парадоксальных вариант. Как бы всегда копируем, но в случае со ссылкой Java подобна С, который называет это передачу "передача по ссылке".
@@java8599 Понял, спасибо большое за ответ
Простите не зашло!!! 50 % предложений заканчиваются словами...погодите сейчас я тут..... слушатель теряет нить рассуждения