Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.65/55: Рейтинг темы: голосов - 55, средняя оценка - 4.65
61 / 23 / 8
Регистрация: 27.07.2010
Сообщений: 496

Одинаковые переменные в одном методе, классе или функции

25.07.2018, 02:11. Показов 12126. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Читаю JavaRush.

Написано -

- Нельзя создать две переменных с одинаковыми именами в одном методе. А в разных методах – можно.

Читаю дальше.

И на другой странице встречаю такое -

- Мы не можем объявить другую переменную с таким же именем в этой же функции или классе.

Я что то не улавливаю, в чем тут разница или подвох.

Объясните пожалуйста простым доступным языком.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2018, 02:11
Ответы с готовыми решениями:

Почему в локальном классе доступны финальные переменные или переменные инициализированные при объявлении
Добрый вечер. Объясните пожалуйста, почему в локальном классе могут использоваться только финальные переменные или переменные которые были...

Глобальная переменная получает данные в одном методе но при запуске второго ,остается равна нулю или null
Здравствуйте, недавно познакомился с ASP.NET ,пишу по курсовому проекту сайт-магазин, у меня появилась проблема с реализацией корзиной...

Осветить переменные на одном графике с помощью функции subplot
осветить переменные на одном графике с помощю функции subplot. Помогите))

50
07.08.2018, 20:05
Студворк — интернет-сервис помощи студентам

Не по теме:

хотел свои 7 копеек вставить, но лучше попкрон поем
так что летс мортал комбат бегин!

0
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
07.08.2018, 20:15
Цитата Сообщение от iSmokeJC Посмотреть сообщение
что выведет этот код?
Выведет 3.
Но что вы хотите этим сказать?
a.i = 3; // что это по вашему?

Или вы хотите сказать, что ссылок в java не существует?

Ладно я приведу пример, это пример передачи по ссылке:
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
package iSmokeJC;
 
/**
 *
 * @author vvm
 */
class Byref{
// переменные класса, иначе как мы узнаем что мы изменили объект?
    public int x;
    Byref(){
    this.x =10;
    }
}
public class TestRef {
    public static void main(String[] args) {
        TestRef testRef = new TestRef();
        Byref r = new Byref();
        
        testRef.refToMethod(r);
        System.out.println("r.x = "+ r.x);
    }
    void refToMethod(Byref ref){
    // мы меняем перемнные объекта класса, потому как объект передается по ссылке
    ref.x = 20;
    }
}
Добавлено через 8 минут
Да я понял, вы просто тролите.
1
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
07.08.2018, 20:17
Цитата Сообщение от vvm28 Посмотреть сообщение
потому как объект передается по ссылке
Потому как передается ссылка и мы можем менять то, что лежит по этой ссылке. Но ссылка передается по значению.

Не по теме:

Welemir1, че го уж. Давайте)



Добавлено через 50 секунд
vvm28, никто не тролит. Например, в Delphi есть передача по ссылке. Хотите пример?
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.08.2018, 20:45
vvm28, все правильно, ты меняешь значение аргумента, но не ссылку!
Напиши в 23 строке ref = new Byref() и посмотри

Добавлено через 22 минуты

Не по теме:

Кстати, подобная полемика уже имела место быть тут на форуме...

1
07.08.2018, 20:48

Не по теме:

Цитата Сообщение от iSmokeJC Посмотреть сообщение
Кстати, подобная полемика уже имела место быть тут на форуме...
Вот только я боюсь давать ссылку на ту тему, а то еще больше запутает)

0
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
07.08.2018, 21:03
iSmokeJC, ну этому есть простое объяснение
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
44
45
46
47
/*
 
 */
package iSmokeJC;
 
/**
 *
 * @author vvm
 */
class Byref {
// переменные класса, иначе как мы узнаем что мы изменили объект?
 
    private int x;
 
    Byref() {
        this.x = 10;
    }
 
    public void setX(int x) {
        this.x = x;
    }
 
    public int getX() {
        return this.x;
    }
}
 
public class TestRef {
 
    public static void main(String[] args) {
        TestRef testRef = new TestRef();
        Byref r = new Byref();
 
        testRef.refToMethod(r);
        System.out.println("r.x = " + r.getX());
    }
 
    void refToMethod(Byref ref) {
        ref = new Byref(); // тут мы потеряли первоначальную ссылку,
        // реф ссылается на новый объект
        // у нас новый объект, который исчезает, ссылка на него не возвращается
 
        ref.setX(20);
        // сам объект ref исчезнет при выходе из метода
        // остается объект r который у нас был в методе  main
    }
}
Добавлено через 10 минут
Есть уточнения. Объект при выходе их метода никуда не пропадает. Он просто отмечается, как не имеющий ссылок.
Он продолжает существовать, пока его не заберет gc.
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.08.2018, 21:07
Цитата Сообщение от mutagen
1. ссылка или значение? в яве всегда!!! по значению где угодно, но иногда это значение это адрес класса и передаётся его копия, но так как копия смотрит туда же в памяти где и оригинал, то можно менять:
а теперь главное!!!, менять можно только мутабельные обьекты, такие как сеты, мапы, листы, стрингбилдеры и тд, даже тогда когда они файнал, так как меняется не сам обьект а его проперти внутри,
есть ещё иммутабельные обьекты, типа примитивов и стрингов и тд, их менять вообще нельзя никак, можно только присвоить новое значение обьявленной переменной, но это будет уже новый обьект, ну и естественно если они файнал, то менять невозможно.
Лучше и не скажешь...
3
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
07.08.2018, 21:21
iSmokeJC, Всё правильно - это более полный ответ.
1
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
07.08.2018, 21:27
vvm28, когда сможете сделать такую вещь на Java - можем обсудить передачу по ссылке. Обратите внимение, что в процедуры каждый раз передается одна и таже переменная.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure foo(i: integer);
begin
   i := i + 1;  //увеличиваем на 1
end;
 
procedure bar(var i: integer);
begin
   i := i + 1;  //увеличиваем на 1
end;
 
var 
  i: integer; //объявляем переменную
begin
  i := 100;
  writeln(i);   //будет выведено 100
  foo(i);        
  writeln(i);   //будет выведено 100, т.к. передача была по значениею и изменения в процедуре "не видно" из вне 
  bar(i);        
  writeln(i);   //будет выведено 101, т.к. передача была по ссылке и изменения в процедуре "видно" снаружи
end.
1
07.08.2018, 21:30

Не по теме:

Навеяло: кто победит, если утюг засунуть в морозилку? Утюг разморозил морозилку, она потекла, утюг замкнуло/сгорел, морозилка приморозила дверь.
Ничья. (c)bash.im

0
07.08.2018, 21:45

Не по теме:

iSmokeJC, Тут если продолжать дискуссию о передаче в метод по ссылке или значению нужно определение
ссылки и определение значения. Иначе всё становится довольно зыбко. Так тут же еще возникают виды ссылок.
И всё равно, даже если у нас нет определения, то мы сами их можем определить.
Получаются какие-то костыли на костылях, а не отражение в программе некоторой реальности мира.

0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.08.2018, 21:49

Не по теме:

vvm28, какая уж тут реальность... Абстракция одна...


1
07.08.2018, 21:54

Не по теме:

JIeIIIa, я не знаю Delphi. То есть я могу как-то понять, но увы ответить что-то вразумительное по этому языку нет.

0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
07.08.2018, 22:00
vvm28, даже не зная языка. Из кода и комментариев разве не понятно что происходит?
Вот не пойму зачем вводить понятия, когда все в спецификации описано. Есть два типа данных: примитивные и ссылочные типы. Так вот ссылочний тип в методы Вы передаете как значение.
1
 Аватар для vvm28
773 / 541 / 67
Регистрация: 22.12.2013
Сообщений: 2,500
Записей в блоге: 26
07.08.2018, 22:50
Favorskij, Нужно вернуться к реальности. Мы как-то прояснили ситуацию?
Цитата Сообщение от Favorskij Посмотреть сообщение
Одинаковые переменные в одном методе, классе или функции
Переменные могут быть одинаковыми, они могут перекрывать друг друга.
Тут важно их отличать. Например - локальная переменная, переменная класса, статическая переменная.
Ответ в области видимости переменных.

Добавлено через 15 минут

Не по теме:

Цитата Сообщение от JIeIIIa Посмотреть сообщение
Так вот ссылочний тип в методы Вы передаете как значение.
Как волка не назови, он все равно в лес смотрит.

1
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
07.08.2018, 23:06
iSmokeJC, По ссылке... по значению..
Начало этой дисскусии меня начинает запутывать (из-за отсутствия нормального опыта), хотя обсуждение этого вопроса я уже встречал в интернетах.
У меня в голове крутится "по копии на ссылку", что и подразумевает наверное ваше "ссылку по значению". Просто меня интуиция обманывает, когда слышу "по значению" представляю себе копирование всего значение/объекта, что не так ибо расточительно.

Можно ли сказать "передается по копии на ссылку"?
Спасибо.

Добавлено через 5 минут
Сообщение от mutagen :
но иногда это значение это адрес класса и передаётся его копия
Ок!
1
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
07.08.2018, 23:11
Цитата Сообщение от ViktorFX Посмотреть сообщение
"передается по копии на ссылку"
В принципе да. Передается копия ссылки. Тут есть картинка и объяснение (шаг 4). Может понятней станет.

Добавлено через 1 минуту

Не по теме:

И да, к теме одинаковости переменных в одном методе ни передача по ссылке, ни передача по значению отношения не имеют :D

2
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.08.2018, 23:11

Не по теме:

Welemir1 был прав, надо было точить попкорн...


1
07.08.2018, 23:12

Не по теме:

Троли, троли... не те вопросы они в темах задают :D

0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
07.08.2018, 23:47
JIeIIIa,
А Лямбда работает в куче или стеке?

Вроде бы и быстрая,недолгоживущая и никто ее извне не видит, в тоже время почти как инстанс анонимного класса..

Добавлено через 9 минут
и еще она работает "извне" с локальными переменными только с final, + выше :
а теперь главное!!!, менять можно только мутабельные обьекты, ... даже тогда когда они файнал, так как меняется не сам обьект а его проперти внутри,
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.08.2018, 23:47

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

Переменная изменилась в одном классе, куда "воткнуть" код в другом классе
Привет всем, Достало это событийное программирование. :wall: Я не делаю событийные "калькуляторы" и "конвертеры",...

В одном классе нужно создать массив, а в классе program его вывести. "Не все ветви кода возвращают значение"
В одном классе нужно создать массив, а в классе program его вывести, помогите, как разобраться namespace con { class Array ...

Переменные в методе класса
При использовании аргумента параметра restaurant_name и cuisine_type в функции describe_restaurant() почему нельзя использовать параметры...

Глобальные переменные в методе класса
Я объявляю класс Button (в .h файле): #pragma once #include <stdio.h> #include <allegro5/allegro.h> #include...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru