Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 516
1

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

28.12.2013, 13:29. Просмотров 896. Ответов 4
Метки нет (Все метки)

Допустим, есть ф-я:
Java
1
2
3
4
int foo()
{
 
}
Хотелось бы чтобы она изменяла значение, передаваемое ей.
Например:
Java
1
2
3
4
5
6
7
8
String typeOfError = "";
 
int foo(typeOfError)
{
//do something
 
typeOfError = "Error while operation abcde";
}
После чего можно было получить уже измененное значение переменной typeOfError.
Я так понял, в Java нет передачи параметров по ссылке. Но может есть удобная замена этому?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2013, 13:29
Ответы с готовыми решениями:

Передача параметров внутрь apk
Всем привет! Для аналитики установок приложения нужно передавать идентификатор...

Notification и передача параметров в Activity
Добрый день! Подскажите, почему в Activity не попадают данные, которые...

Передача параметров с Activity в Fragment
Здравствуйте! У меня не получается передать параметры с Activity в Fragment....

Комбинирование программных параметров текста и параметров из layout
Есть класс, отображающий layout на котором есть элемент TextView. В layout...

Передача параметров по ссылке
Правильно ли я понимаю, что все параметры, описываемые после слово var будут...

4
ASDFD12
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 544
28.12.2013, 13:56 2
String - это ссылочный тип Java, соответстевенно передается ссылка и в твоем случае все должно работать
1
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 516
28.12.2013, 14:04  [ТС] 3
Цитата Сообщение от ASDFD12 Посмотреть сообщение
String - это ссылочный тип Java, соответстевенно передается ссылка и в твоем случае все должно работать
Точно. Объекты передаются по ссылке. А значит не только строки, но и перечисления передаются по ссылке.
Уже легче ).
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
28.12.2013, 18:28 4
Цитата Сообщение от Slon747 Посмотреть сообщение
Я так понял, в Java нет передачи параметров по ссылке. Но может есть удобная замена этому?
Именно так. В метод можно передать ссылку на объект и потом внутри метода делать любые манипуляции с объектом на который эта ссылка ссылается. Однако, внутри метода вы не сможете сделать так, чтоб ссылка стала указывать на другой объект. Строка в джаве это неизменяемый объект, и когда внутри метода вы попытаетесь присвоить параметру новое значение - оно будет доступно только внутри метода. За пределами метода никаких изменений не произойдет. Следующий код напечатает "1111" в подтверждении моих слов:
Java
1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args)  {
        String tmp = "1111";
        foo(tmp);
        System.out.println(tmp);
    }
    static void foo(String str) { 
        str = "2222";
    }
}
Как быть?
1) Использовать StringBuffer вместо String
2) Юзать адский костыль с массивом из одного элемента (не рекомендуется) :
Java
1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args)  {
        String tmp[] = {"1111"};
        foo(tmp);
        System.out.println(tmp[0]); // Напечатает 2222
    }
    static void foo(String str[]) { 
        str[0] = "2222";
    }
}
1
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 516
29.12.2013, 15:35  [ТС] 5
Цитата Сообщение от angryrobot Посмотреть сообщение
Именно так. В метод можно передать ссылку на объект и потом внутри метода делать любые манипуляции с объектом на который эта ссылка ссылается. Однако, внутри метода вы не сможете сделать так, чтоб ссылка стала указывать на другой объект. Строка в джаве это неизменяемый объект, и когда внутри метода вы попытаетесь присвоить параметру новое значение - оно будет доступно только внутри метода. За пределами метода никаких изменений не произойдет. Следующий код напечатает "1111" в подтверждении моих слов:
Java
1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args)  {
        String tmp = "1111";
        foo(tmp);
        System.out.println(tmp);
    }
    static void foo(String str) { 
        str = "2222";
    }
}
Как быть?
1) Использовать StringBuffer вместо String
2) Юзать адский костыль с массивом из одного элемента (не рекомендуется) :
Java
1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args)  {
        String tmp[] = {"1111"};
        foo(tmp);
        System.out.println(tmp[0]); // Напечатает 2222
    }
    static void foo(String str[]) { 
        str[0] = "2222";
    }
}
Спасибо.
0
29.12.2013, 15:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2013, 15:35

Передача параметров по ссылке
У кого есть рабочий вариант сего чуда ? (К примеру,функции квадратного корня).В...

Передача параметров по ссылке
Стоит ли передавать все параметры (кроме скалярных и указателей) по сслыке?...

Передача параметров по ссылке
Вот задание: С клавиатуры вводится число, передается в вызываемую функцию, в...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru