Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обьясните мне кусочек кода из теста, кусок кода. почему так? 
:(
    Опции темы
sneer
Дата 19.1.2009, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



Код


 class Value
 {
    public int i = 15;
 }
 public class Test {


public static void main(String  argv[])
{
    Test t = new Test();
    t.first();
}
public void first()
{
    int i =5;
    Value v = new Value();
    v.i= 25;
    second(v,i);
    System.out.println(v.i);

}
public void second(Value v, int i)
{
    i=0;
    v.i=20;
    Value val = new Value();
    v=val;
    System.out.println(v.i+"  "+i);
}
 }


почему выводит 15 0 20? Не могу понять. где-то видать что-то пропустил когда читал книжку.
PM MAIL   Вверх
inohodec
Дата 19.1.2009, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 1.12.2004

Репутация: 2
Всего: 2



Где то что то пропустил smile 

Сначала ты распечатываешь функцию - second

В ней у тебя переменная v  смотрит на new Value, т.е. выводится 15 и 0

Затем ты возвращаешься в функцию - first, и распечатываешь значение которое задал в предыдущей функции - second

PS
Почитай как передаются значения в Джаве smile
PM MAIL   Вверх
ecologist
Дата 19.1.2009, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 2
Всего: 9



Когда ты передал в метод second объект Value - ты передал копию ссылки на объект. Но не сам объект.

Теперь в методе second ты присвоил через ссылку полю объекта (v.i=20) - теперь объект имеет значение для i - 20.
Очень важно заметить, что объект - это отдельная чсть памяти, на которую ссылаются ссылки.
Потом в методе second ты создал новый объект Value (который при инициализации имеет значение поля i=15).
Ну вот ты его и напечатал - 15. 

Потом ты печатаешь обычную переменную i - она определена внутри метода и имеет значение 0.

А при печати в методе first ты печатаешь значение объекта, ссылку на который ты передавал - ссылка копируется, а объект нет. Т.е. у тебя две ссылки на один и тот же объект. И в методе second ты через копию ссылки объект поменял - поле v.i=20.

Так что все корректно.
PM MAIL   Вверх
sneer
Дата 20.1.2009, 03:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 13.10.2008

Репутация: нет
Всего: нет



ага тоесть 
Код

Value val = new Value();
    v=val;

 затирает только ссылку. Всё таки в java как-то не явно всё это по сравнению с с++ там если ссылка так ссылка, указатель так указатель.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.