С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188

Изменение локальной переменной в методе

05.12.2013, 14:46. Показов 6654. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, читаю Хорстманна и наткнулся на такую вещь, что локальные переменные передаются в метод по значению и после некоторых манипуляция с ними в теле метода они все-таки остаются прежними, другое же дело с объектами. Ну например:

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
class Employee {
    private int val;
    
    Employee(int temp){
        val = temp;
    }
    
    void set_val(int temp){
        val = temp;
    }
    
    int get_val(){
        return val;
    }
}
 
 
public class Demo {
    
    static void in_cube(int val){
        val *= 3;
        System.out.println("Внутри метода: " + val);
        
    }
    
    static void in_cube(Employee _ob){
        _ob.set_val(_ob.get_val() * 3);
        System.out.println("Внутри метода: " + _ob.get_val());
    }
    
    public static void main(String[] args){
     
        int x = 10;                                         //локальная переменная
        in_cube(x);                                         //пытаемся изменить ее в методе
        System.out.println("В мейн: " + x);                    //получаем старый результат
        
        Employee ob = new Employee(10);                     //создаем объект
        in_cube(ob);                                        //изменяем объект
        System.out.println("В мейн: " + ob.get_val());     //получаем новый результат
    }
}
Хотя в плюсах возможно было передать переменную по ссылке и получить (&) и получить требуемый результат. Есть ли вариант сделать что-то подобное в Джава? Заранее благодарю за ответ
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.12.2013, 14:46
Ответы с готовыми решениями:

Изменение переменной в методе
Здравствуйте, перешел из плюсов сюда. Хотелось бы узнать, как можно изменить переменную в методе? В С++ были ссылки и указатели. В C#...

Как передать данные из переменной в методе, переменной в классе
Всем привет! Нужно значение переменной connecting передать connectionString. class DAL { // строка...

Изменение данных в методе
Как мне в зависимости от выбранного чекбокса передать другое значение (или число) в метод GenerateCombinations? То есть если выбран или...

4
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
05.12.2013, 15:07
Цитата Сообщение от Yoghurt_92 Посмотреть сообщение
Хотя в плюсах возможно было передать переменную по ссылке
В плюсах это возможно передачей по указателю. Передача по ссылке работает же аналогично как и в java. Если из одной функции надо вернуть несколько результатов, то надо подумать "то ли я делаю". В качестве решения можно использовать враппер:
Java
1
2
3
4
5
6
7
8
class MyClassWithIntValue{
      int val;
}
static void in_cube(MyClassWithIntValue val){
        val.intValue *= 3;
        System.out.println("Внутри метода: " + val.intValue);
        
    }
Ну или так, когда совсем лень создавать класс:
Java
1
2
3
4
5
static void in_cube(int[] val){
        val[0] *= 3;
        System.out.println("Внутри метода: " + val[0]);
        
    }
0
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
05.12.2013, 23:20  [ТС]
KuKu, как я понял, лучше тогда делать просто так

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Demo {
 
    static int temp = 10;
    
    public static void main(String[] args){
     
        System.out.println("До: " + temp);
        
        temp = function(temp);
        
        System.out.println("После: " + temp);
    }
    
    static int function(int val){
        return val *= 3;
    }
}
а если нужно возвращать несколько элементов то воспользоваться массивом или вектором
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
06.12.2013, 08:46
Лучше возвращать значение не через параметр. Если через параметр, то классом. Иметь глобальную переменную - по сути сейчас это static int temp - не потокобезопасно да и плохо вообще.
1
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
06.12.2013, 18:20  [ТС]
KuKu, я вас понял, вопрос был существуют ли другие способы и я получил ответ, что кроме как возвращения из метода нет. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.12.2013, 18:20
Помогаю со студенческими работами здесь

Изменение строки в методе
Добрый день. сделал функцию на получения полного пути из короткого но при выходе из функции возникает ошибка HEAP CORRUPTION DETECTED ...

Инициализация и объявление переменной в методе
Как методу задать не фиксированное количество переменных? К примеру от 0 до 2-х def method(a,b) "bla" end #... ...

Использование переменной в методе COM объекта
Есть SQL-подобная база, доступ к базе возможен только через COM интерфейс. Реализован следующий метод для получения инфомации: ...

Объявление static переменной в методе
В С/C++ в методах можно объявлять static переменные. Пытаюсь сделать так же в C#,но ошибка: static void some_function() { ...

Вызов переменной в другом методе
Здравствуйте! 2 кнопки на форме - одна выбирает файл в проводнике - другая его запускает. В последствии - хочу еще поле, для...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru