В чем разница механизма присваивания?!
- Войдите на сайт для отправки комментариев
Предположим что у нас есть:
String st1="";
String stroka="_тут_многа_разных_букав_";
теперь если написать так:
st1=stroka.charAt(_номер_чара_из_строки_)+stroka.charAt(_номер_чара_из_строки_);
то в st1 мы получим результат сложения аски кодов,указанных чаров.
А если написать так:
st1=st1+stroka.charAt(_номер_чара_из_строки_)+stroka.charAt(_номер_чара_из_строки_);
что казалось бы суть одно и тоже, за исключением выкидывания того что было в st1 до присваивания в первом примере.
то мы получим совсем другое, - пару указанных чаров в той же st1!
Что бы не было инвариантности, - если мы берём 5 и 10 чар из строки, и они к примеру 0 и 5, то в первом случае в st1 окажется число 101. А во втором окажется 05, что не равнозначно как по выводному значению так и по хранимым в железяке электрончикам. :)
Почему так? В чём разница?
Хотел поглумиться... ну да ладно. Сегодня вечер трезвости. Будем добрее!
В С++ это назывется "перегрузка операторов". Оператор "+" перегружен разными смыслами, зависящими от того, что мы складываем, то есть от типов операндов.
строка + строка = строка,
срока + символ = символ.
А вот символ + символ = символ, то есть его код.
Понял?
В 4 абзаце сразу две ошибки: пропущена буква "т" и после знака равенства должно быть "строка".
Хотел поглумиться...
...
В С++ это назывется "перегрузка операторов". Оператор "+" перегружен разными смыслами, ...
Получилось :)
В 4 абзаце сразу две ошибки: пропущена буква "т" и после знака равенства должно быть "строка".
угу
Хотел поглумиться...
...
В С++ это назывется "перегрузка операторов". Оператор "+" перегружен разными смыслами, ...
Получилось :)
ну не получился вечер трезвости... что ж теперь?
Так пятница ж. Нормас. Да дело в перегрузке. Штука реально опасная, можна перегрузить пошти все и получить 2+2=5. Но может быть и удобной для привлечения очередной жертвы.
Спасибо за ответ. Это касается только сложения или других операторов тоже?
И в догонку: скажем в описании Стрингов, во многих местах прямо указанно, что используется Stream. Но в других описаниях функций никаких ссылок и близко нет. Как вообще надо определять откуда ноги растут у той или иной функции? Разумеется это касается только библиотек, которые не добавляются руками..
И в догонку: скажем в описании Стрингов, во многих местах прямо указанно, что используется Stream. Но в других описаниях функций никаких ссылок и близко нет. Как вообще надо определять откуда ноги растут у той или иной функции?
Если есть описание - смотреть описание. Если нет описания - смотреть код.
Разумеется это касается только библиотек, которые не добавляются руками..
Абсолютнор без разницы, как добавлена библиотека.