Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / String является простым типом данных? / 21 сообщений из 21, страница 1 из 1
17.01.2006, 19:22
    #33488173
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
в Java как я понимаю есть простые типы которые передаются по значению и есть сложные типы которые передаются по ссылке.

вопрос в следующем каким типом является String

пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 void  workWithString ( String str ) {
    str = "new value";
    System.out.println(str);
}

String my_str;
my_str =  new  String("old_value");
System.out.println(my_str);
workWithString(my_str);
System.out.println(my_str);
Получаем:
old_value
new value
old_value

Почему?
...
Рейтинг: 0 / 0
17.01.2006, 19:30
    #33488182
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
/topic/229151&pg=2#2024150
-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
17.01.2006, 19:55
    #33488214
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
fuf спасибо типа
фак читал только давно поэтому и не видел
...
Рейтинг: 0 / 0
17.01.2006, 20:39
    #33488251
my_str
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
vfabrв Java как я понимаю есть простые типы которые передаются по значению и есть сложные типы которые передаются по ссылке.Нет. В Java все типы передаются по значению. Осмысли это, это написано в "Философии Java", похоже, тебе уже пора ее читать. Объекты тоже передаются по значению, просто в метод копируется ссылка на объект (или String, который тоже объект) и все операции над ссылкой в методе не повлияют на значение переменных выше по стеку

Т.о.

Код: plaintext
1.
workWithString(my_str);
System.out.println(my_str);
my_str будет и дальше указывать на String("old_value")
...
Рейтинг: 0 / 0
17.01.2006, 23:05
    #33488343
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
Вы видно прочитать прочитали, да ничего путного из этой книги не вынесли ... может перечитать следует?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 void  workWithString ( String[] str ) {
    str[ 0 ] = "new value";
    System.out.println(str[ 0 ]);
}

String[] my_str = {"old_value"};
System.out.println(my_str[ 0 ]);
workWithString(my_str);
System.out.println(my_str[ 0 ]);

какой ответ получается?
...
Рейтинг: 0 / 0
18.01.2006, 00:14
    #33488380
K1RUHA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
vfabrВы видно прочитать прочитали, да ничего путного из этой книги не вынесли ... может перечитать следует?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 void  workWithString ( String[] str ) {
    str[ 0 ] = "new value";
    System.out.println(str[ 0 ]);
}

String[] my_str = {"old_value"};
System.out.println(my_str[ 0 ]);
workWithString(my_str);
System.out.println(my_str[ 0 ]);

какой ответ получается?

Массивы передаются по ссылке, поэтому метод изменит именно массив, а не строку.
...
Рейтинг: 0 / 0
18.01.2006, 00:48
    #33488398
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
[...]

я знаю что объекты передаются по ссылке и что простые типы передаются по значению

я хотел убедится что String является "исключением" чтоли ... вообщем надеюсь понятно

далее я задал вопрос чтобы убедится в своих умозаключениях

все я получил ответ на свой вопрос
тема закрыта

[...]
...
Рейтинг: 0 / 0
18.01.2006, 06:28
    #33488458
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
vfabr
вопрос в следующем каким типом является String

пример
....
почему?


1. String - ссылочный тип.

2.
Ключевая фраза: "В Java реализован только один способ передачи параметров -
по значению"

Потому что твой объект - формальный параметр str является локальным объектом
в методе workWithString. Он создается локально в методе при его вызове, в
него копируется значение из твоего "внешнего" объекта my_str (значение
ссылки на "внешний" объект- стрку "old_value"), потом ты это значение
(значение ссылки) изменяешь на созданный локально в методе объект-строку
"new value". "Внешний" же объект my_str продолжает указывать на объект -
строку "old_value". Вот и все.

3.
Сам баран. Тебе уже несколько раз тоже самое сказали. Даже я понял.
Это же надо:
vfabr
я знаю что объекты передаются по ссылке и что простые типы передаются по
значению


Еще раз читай. ВСЕ передается по значению.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
18.01.2006, 11:38
    #33488962
String является простым типом данных?
Вообще все передаеться по ссылке, если я создам массив на гигабайт и буду его передовать в методы он же не будет копироваться ? :-) В JAVA вообще все не примитивные переменные суть указатели на экземпляры объектов.
и если вы делаете

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 void  workWithString ( String str ) {
    str = "new value";
    System.out.println(str);
}

String my_str;
my_str =  new  String("old_value");
System.out.println(my_str);
workWithString(my_str);
System.out.println(my_str);
то методу workWithString передаеться именно указатель( а вот он то и передаеться по значению - но следует замететь не сам объект копируеться, а только указатель на него). Потом вы этот указатель меняете командой str = "new value", но меняеться именно копия указателя, который и указывает на новый объект "new value". А старый указатель my_str как указывает на new String("old_value") так и указывает дальше :-)
...
Рейтинг: 0 / 0
18.01.2006, 12:34
    #33489149
String является простым типом данных?
Квиринг Алексей ВикторовичВообще все передаеться по ссылке, если я создам массив на гигабайт и буду его передовать в методы он же не будет копироваться ? :-) В JAVA вообще все не примитивные переменные суть указатели на экземпляры объектов.
и если вы делаете
...
то методу workWithString передаеться именно указатель( а вот он то и передаеться по значению - но следует замететь не сам объект копируеться, а только указатель на него). Потом вы этот указатель меняете командой str = "new value", но меняеться именно копия указателя, который и указывает на новый объект "new value". А старый указатель my_str как указывает на new String("old_value") так и указывает дальше :-)

Тебе так и сказали:

автор
Объекты тоже передаются по значению, просто в метод копируется ссылка на объект (или String, который тоже объект) и все операции над ссылкой в методе не повлияют на значение переменных выше по стеку

Гигабайт копироваться не будет. Будет копироваться ссылка на него.

КОПИРУЕМЫМ ЗНАЧЕНИЕМ ДЛЯ ОБЪЕКТА ЯВЛЯЕТСЯ АДРЕС В ПАМЯТИ, ГДЕ ОН РАСПОЛОЖЕН (ссылка)
...
Рейтинг: 0 / 0
18.01.2006, 14:19
    #33489491
K1RUHA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
Лучше всех по этому поводу высказался сам Брюс Эккель:

Брюс ЭккельХорошо объяснив точку зрения обеих сторон и сказав: «То, что вы думаете о ссылке, зависит только от вас», - я попытался уйти в сторону от этого вопроса. В конце концов, это не так уж и важно – главное здесь понять то, что передача ссылки означает возможное неожиданное изменение объекта, который привязан к ссылке.
...
Рейтинг: 0 / 0
18.01.2006, 14:25
    #33489514
K1RUHA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
Думаю, что String (а еще Integer, Float, Double etc) как раз и попадают под исключение из «возможное изменение», т.к. эти объекты являются неизменяемыми.
...
Рейтинг: 0 / 0
18.01.2006, 15:59
    #33489764
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
Если мы говорим о передаче объекта в метод в качестве параметра, то правильнее сказать наверное будет так: в метод передается значение ссылки, а не просто, какое то непонятное значение. Вот объясните мне, что значит значение объекта? :)
...
Рейтинг: 0 / 0
18.01.2006, 16:17
    #33489811
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
Объект - это переменная, ее значение - это состояние объекта в конкретный момент времени
...
Рейтинг: 0 / 0
18.01.2006, 16:37
    #33489886
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
funikovyuriОбъект - это переменная, ее значение - это состояние объекта в конкретный момент времени

значением переменной не может быть состояние объекта. Значение переменной это число, которое предсавляет из себя либо данные (простой тип) либа адрес ОП (сложный тип).
...
Рейтинг: 0 / 0
18.01.2006, 16:49
    #33489927
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
авторЗначение переменной это число, которое предсавляет из себя либо данные (простой тип) либа адрес ОП
весьма поверхностная трактовка понятия "значение переменной какого-либо типа" :)
...
Рейтинг: 0 / 0
18.01.2006, 17:15
    #33490007
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
сказать, что в метод предается "состояние объекта в конкретный момент времени" тоже как то не очеь :)
...
Рейтинг: 0 / 0
18.01.2006, 17:23
    #33490023
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
В метод передается ссылка на объект (ссылка на переменную). При этом ссылка передается по значению
...
Рейтинг: 0 / 0
18.01.2006, 17:48
    #33490107
vfabr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
авторПри этом ссылка передается по значению

где-то происходит по другому?
...
Рейтинг: 0 / 0
18.01.2006, 17:55
    #33490131
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
vfabr авторПри этом ссылка передается по значению

где-то происходит по другому?

аха, при передачи массива, предеается сама ссылка на этот массив.
Или в C++ например все подругому.
...
Рейтинг: 0 / 0
18.01.2006, 18:01
    #33490146
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
String является простым типом данных?
vfabr авторПри этом ссылка передается по значению

где-то происходит по другому?

это было насчет фразы "в java все передается по значению"
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / String является простым типом данных? / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]