С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 3
Регистрация: 22.06.2014
Сообщений: 54

Передача параметров в функцию по значению

12.10.2016, 21:59. Показов 3145. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер. Никак не могу разобраться с темой передачи в функцию параметров. Знаю, что все параметры в Java передаются по значению. Тогда возникает вопрос почему при передачи ссылки на объект типа String или Integer и т.д. в функцию с последующей модификацией объектов, эти объекты не изменяются?

Добавлено через 6 минут
Забыл написать переменные типа String, Integer объявлял с модификатором static
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2016, 21:59
Ответы с готовыми решениями:

Передача коллекции по значению
как сделать глубокое клонирование коллекции List<List<Double>> list = new ArrayList<>() в коллекцию List<List<Double>>...

Передача по значению в Java
Подскажите в верном ли я направлении с передачей аргументов в Java. Итак код в СИ: void test (int *a) { *a=200; } int...

Передача параметра по значению ссылки
Не совсем понимаю почему вывод 10 Как я думаю должно работать: в метод modify() передали копию ссылки на объект z, и изменение в методе...

10
31 / 31 / 12
Регистрация: 25.07.2015
Сообщений: 120
12.10.2016, 22:09
person2713, читай javadoc. Объекты этих классов immutable.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
12.10.2016, 22:15
Цитата Сообщение от striker24 Посмотреть сообщение
Объекты этих классов immutable.
Это тут не при чём.

Цитата Сообщение от person2713 Посмотреть сообщение
с последующей модификацией объектов, эти объекты не изменяются?
Каким это образом ты их модифицируешь?
0
0 / 0 / 3
Регистрация: 22.06.2014
Сообщений: 54
12.10.2016, 22:25  [ТС]
korvin_, допустим так.
Java
1
2
3
4
5
6
7
8
9
10
11
public Class Example{
   public static String  str = "name";
   public static void change (String name){
       name = "new name";
  }
  
  public static void main(String[] args) {
      change(str);
      System.out.println(str);
  }
}
на выходе получу name.
0
31 / 31 / 12
Регистрация: 25.07.2015
Сообщений: 120
12.10.2016, 22:26
korvin_,
Цитата Сообщение от korvin_ Посмотреть сообщение
Это тут не при чём.
а можно узнать почему?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
12.10.2016, 22:32
Цитата Сообщение от striker24 Посмотреть сообщение
а можно узнать почему?
Потому что у этих классов нет мутирующих методов. И смотри его код выше.

Цитата Сообщение от person2713 Посмотреть сообщение
допустим так.
Что значит «допустим»? Ты понимаешь, что ты делаешь? Сам же написал, что все параметры в Java передаются по значению. Ты какой язык до Java изучал?

В общем, ты меняешь значение параметра name метода change, а не объект, связанный с полем str, который передаёшь в него.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
12.10.2016, 22:34
Цитата Сообщение от korvin_ Посмотреть сообщение
Это тут не при чём.
почему же не при чем? Значение переменной за пределами метода не изменяется именно потому что переменная immutable
0
0 / 0 / 3
Регистрация: 22.06.2014
Сообщений: 54
12.10.2016, 22:41  [ТС]
korvin_, смотри я правильно понимаю: я передаю в метод change копию ссылки на объект str, потом я меняю значение ссылки name, так чтобы она ссылалась на объект "new name". Так как все это делается в методе, то после выхода из метода данной ссылки name и объекта "new name" уже не будет.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
12.10.2016, 22:43
Лучший ответ Сообщение было отмечено person2713 как решение

Решение

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Значение переменной за пределами метода не изменяется именно потому что переменная immutable
1) Переменная не immutable, если не отмечена как final.
2) Измение переменной и иммутабельность объекта (о чём написал striker24) — не одно и то же.
3) В подавляющем большинстве случаев, когда задают такие вопросы, какой задал ТС, речь идёт об изменении внешней переменной, переданной по ссылке, что позволяют некоторые языки (C++, Pascal, C# и д.р.).

Добавлено через 27 секунд
Цитата Сообщение от person2713 Посмотреть сообщение
смотри я правильно понимаю: я передаю в метод change копию ссылки на объект str, потом я меняю значение ссылки name, так чтобы она ссылалась на объект "new name". Так как все это делается в методе, то после выхода из метода данной ссылки name и объекта "new name" уже не будет.
Да, всё верно.
1
0 / 0 / 3
Регистрация: 22.06.2014
Сообщений: 54
12.10.2016, 22:45  [ТС]
korvin_, Спасибо, а то каша в голове была.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
12.10.2016, 23:11
person2713, но если уж очень приспичит изменить, то вот такой вариант возможен:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Example {
    public static String str = "name";
 
    public static String change(String name) {
        name = "new name";
        return name;
    }
 
    public static void main(String[] args) {
        str = change(str);
        System.out.println(str);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2016, 23:11
Помогаю со студенческими работами здесь

Передача объекта по ссылке или о значению
Да, да, снова этот вопрос. Допустим у меня есть объект Student с полями String surname и String name. Этот объект лежит двух разных листах....

Передача параметров в функцию по значению, по ссылке и по указателю
Доброе время суток товарищи программисты. Столкнулся с кучей ошибок в написании простой программы. Задача заключается в том чтобы написать:...

Передача параметров в функцию по значению, по ссылке или по указателю
Передача параметров в функцию по значению, по ссылке или по указателю. Чем отличаются эти 3 способа. И, если не сложно, привести...

Передача параметров по указателю, ссылке и значению
Задание: Вычислить Y(x) и S(x). (где x принадлежит диапазону ) Y(x) и S(x) реализовать в виде отдельных функций. Продемонстрировать ...

Передача параметров функции по значению, ссылке и указателю
Вычислить F=f(a)-5f^3(sin(b/2))+1/f(1+c^4), де f(x)=3x^2-2x^2+7, при a=5.08, b=-0.65, c=3.87 Добавлено через 45 минут #include...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru