StringBuilder sb = new StringBuilder("Hello"); не сработало, но методом тыка получилось с такой записью java.lang.StringBuilder sb = new java.lang.StringBuilder("Hello"); Не знаю, насколько это корректно?!
Спасибо большое, за урок. Очень интересно и познавательно. Единственное, возможно я ошибаюсь. но вызов метода toString() уже не нужен (12:05), так как System.out.println() автоматически его вызывает. Поэтому достаточно написать System.out.println(sb); вместо System.out.println(sb.toString());
Нет, это не так работает. Метод sout(System.out.println()) просто выводит на экран переменную с тем же типом переменной. Вы можете проверить это с помощью метода instanceof, которая проверяет тип данной переменной
та же история) ох свезло выйти на этого человека! Сейчас досмотрю (повторно, для закрепления) курс для начинающих и приступлю к продвинутой. Успехов нам)
@@blackteam5273 Как я стал? 8 месяцев по 5 часов в день книги, код, решение задач, ревью кода, ютуб(но заметь я это на последнем месте написал) помимо этого общение в сообществах. Потом еще месяц мок интервью и не только технические. Заработал позвоночную грыжу... 13 собесов -> 8 оферов
9:31 То есть, если конкатенируем строки обычным образом, то создаются два новых объекта, так как две операции “+”? Или объект прошлой конкатенации str1+str2 будет удален после того как мы плюсанем +str3 и это удаление будет являться дополнительной операцией, которая была бы нежелательна с точки зрения оптимизации? Или дело не в удалении, а в создании лишнего объекта? Я не совсем понимаю в чем замедление быстродействия происходит по сравнению со СтрингБилдером
При каждой конкатенации строк под капотом перегруженного оператора + создается объект StringBuilder и используется метод append, т.е мы прилично загружаем память, когда пользуемся объектом StringBuilder явно, мы создаем объект один раз и пользуемся его функционалом без создания новых объектов.
На 9:53 я не понял, что случилось? Сначала говорилось, что удаляет JVM эти строки, которые до конкотенации были, потом "конечно нет". Так запутывает эта поправка.
На 10:55 -10:58 - цитата дословно "т.е. объекты класса String могут изменяться в ходе программы" - оговорка, наверное. Речь об объектах класса StringBuilder? они именно mutable (изменяемые).
У меня получилось,чтотназвание главного класса и метода объекта были одинаковые. Поэтому java не поняла,что я хотел.Я поменял название главного класса на другое и у меня пошло.У меня в этом была проблема.
Действительно, в данном случае можно не вызывать метод toString() для объекта класса StringBuilder, так как этот объект при выводе на экран будет иметь вид строки, который нам и нужен. Другое дело, что для других классов приходится переопределять логику этого метода, так как он будет не совсем корректно отображать объекты в виде строки. Скажу больше, мы могли не писать этот метод хотя бы потому, что он и так вызывается неявным образом при вызове метода System.out.println(). То бишь, даже если мы явно не вызываем метод toString(), для какого бы то ни было объекта, он всё равно будет вызван без нашего участия. Следуя этой логике, можно прийти к выводу, что даже при написании System.out.println(sb); без .toString(), метод .toString() всё равно будет вызываться внутри метода System.out.println(). Вывод: System.out.println(sb); и System.out.println(sb.toString()); это одно и то же (эти 2 строчки полностью эквивалентны).
Метод print перегружен. Поэтому для разного типа входных параметров у него своя логика. Получая на вход объект он ищет toString, если он не переопределен, то вызывается метод родителя (в конечном счете это Object)а это вывод имени класса и хэшкода разделенные собачкой( если не ошибаюсь)
Любая цепочка конкатенаций проходит через промежуточный StringBuider, а потом вызывается конструктор String и возвращается новая строка. Чтобы в этом убедиться, достаточно посмотреть код JVM
@@Dmitry_RSStringBuilder - это класс, предоставляющий удобные методы для работы с изменяемыми строками. Он позволяет выполнять множество операций с текстом без создания дополнительных объектов в памяти, что делает его более эффективным для конкатенации большого числа строк. StringBuilder рекомендуется использовать, когда вам необходимо собирать или изменять строки в циклах или приложениях с большим объемом операций над строками. Объединение строк с помощью оператора + является более простым, но менее эффективным способом объединения небольшого числа строк. Хотя использование + для объединения строк удобно и читабельно, оно неэффективно для случаев, когда объединяется большое количество строк или выполняется множество операций над строками. Отличие между StringBuilder и объединением строк через + заключается в их производительности. Когда объединяется большое количество строк, использование StringBuilder может существенно увеличить производительность вашего кода, так как он позволяет избежать создания множества промежуточных строк в памяти, что приводит к меньшему потреблению ресурсов и более быстрой работе.
@@Dmitry_RSВажно выбирать подходящий метод в зависимости от конкретного сценария. Если вам нужно объединить всего несколько строк или выполнять эту операцию редко, оператор + может быть вполне удовлетворительным. Однако, если вам необходимо объединить много строк или проводить множество операций над текстом, то StringBuilder будет более предпочтительным выбором для оптимизации производительности.
Подскажите,пожалуйста,когда я попытался создать String x = new String(); у меня new String был подсвечен серым цветом,а у вас нет.В чем причина?Заранее благодарю!
спасибо за уроки!!! у меня вопрос: почему я не могу применить к объекту sb класса stringbuilder метод toUpperCase ни напрямую через точку, ни присвоением нового значения? спасибо.
Ответ кроется в самом вопросе. Метод toUpperCase применим к символам СТРОКИ. Именно по этому он не может применяться к ОБЪЕКТУ коим является stringbuilder. Если проще то: stringbuilder sb это коробка. Внутри этой коробки находится некая строка, которая вызывается методом toString(). И уже к этой строке можно применить toUpperCase. Собственно это уже и есть код: sb.toString().toUpperCase; Можно в два действия: String out = sb.toString(); // Вывод строки объекта sb в переменную строки out. out = out.toUpperCase(); // Применение метода к переменной, содержащей строку
Странно, когда я пишу код в Ide, у меня ошибка, при попытке написать Hello в стринг билдере. Более того, sb.append выделен красным. ide решила проблему c аппендом, создав ниже private void append(String s). В видео ничего такого нет. Это может быть из за того, что за это время что-то в джаве поменялось?
@@ChernovSanek бл ты гений! Спасибо. дал себе привычку никогда не называть файлы названиями методов и прочего из-за возможных ошибок, но тут подзабил..
Потому что ты в методе sout() сразу вызываешь метод апперКейс, который в свою очередь делает операции над переменно х и нет смысла заново присваивать) Хотя наверное спустя 2 года немного поздновато отвечать :D да и Вы если продолжили с тех пор заниматься уже наверняка должны были стать шарящим человеком))
StringBuilder string = new StringBuilder("Hello"); System.out.println(string.toString()); string.append(" darkness").append(" my old friend"); System.out.println(string.toString()); - почему в этой строчке мы пишем "toString", а не просто string?
мушто метод подразумевает под собой конвертацию н-ого типа в String, оттуда и такое название, а string нам ничего не говорит, да и в стрингбилдере такого метода вроде нет
Почему-то мне приходится прописывать так: public class StringBuilder { public static void main(String[] args) { java.lang.StringBuilder sb = new java.lang.StringBuilder("Hello"); sb.append(" my").append(" friend"); System.out.println(sb.toString()); } } Т.к. без java.lang. не работает append. С чем это можно быть связано?
Не работает код на версии 2017.3.5. Выкидывает ошибку: Error:(30, 28) java: constructor StringBuilder in class StringBuilder cannot be applied to given types; required: no arguments found: java.lang.String reason: actual and formal argument lists differ in length Подскажите что делать,застрял.
Всё очень понятно и доходчиво. По окончанию урока начал сам писать этот код со StringBuilder'ом, но почему-то на месте конструктора, куда мы вписывали "Hello", подчеркнули красным и попросили создать конструктор. Метод "append" почему-то не существует для них, тоже нужно самому создавать. Вот код: public class StringBuilder { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Hello"); sb.append(" my class"); } } Подскажите пожалуйста, вроде всё идентично с видео, а работать не хочет. P.S. Оказывается, это происходило из-за того, что объект StringBuilder совпадал с названием класса. Если изменить название класса, то всё заработает. Но почему так?
Потому что твой класс называется также как и стандартный класс в java.lang. Конфликт с названиями. Ты пытался вызвать метод .append() дял своего класса
@@ChernovSanek разве можно создавать классы(доступные друг другу) с одинаковыми названиями, и, есть ли какой-то приоритет при создании ссылки на объект этого класса?
Добрый вечер, в первую очередь спасибо большое за то что вы делаете! Курс просто бомбовый)) И вопрос: почему для вывода на экран у sb нужно вызывать метод toString()? Без этого метода тоже все выводит.
посмотрел урок тяжело понимать так как я не давно начал смотреть видео ролики , может поэтому , читаю комменты всем всё понятно а мне нет! либо я тупой либо это люди раньше занимались программированием
а чем этот метод отличается от метода concat() , чем лучше или какие отличия ? на мой взгляд этот метод проще, не нужно создавать заранее ни чего отличного от обычного String, проще вывод... пример: String a = " text "; a = a.concat("text two"); System.out.println(a); вывод : text text two
отличия в так называемом "нерационального использования памяти". Твоим способом мусор остается в памяти, через билдер нет. Метод append принимает любой тип данных, а concat только string. А уж про всякие полезные методы билдера лучше самому почитать)
Представь: Ты сидишь за столом с двумя волшебными штампами. Они волшебный, потому что каждый раз, когда ты ставишь ими печать, они отпечатывают новое слово, которое ты задумала у себя в голове. Эти штампы называются "Стринг" и "СтрингСтроитель". Кроме печатей также нужен лист бумаги, на котором, собственно этими штампами ставить печати. Листы бумаги хранятся в шкафу в трёх метрах от стола, за которым ты сидишь и взять за раз можно только один лист. Представила? Теперь давай выясним чем отличаются эти две печати. Как они работают: Печать "Стринг" работает так, что за одном листке бумаги можно поставить только одну печать. Поэтому, если тебе надо напечатать предложение из трёх слов, то тебе потребуются следующие действия: 1. Встать из-за стола, дойти до шкафа, взять лист и вернуться за стол. 2. Отштамповать слово печатью "Стринг". 3. Встать из-за стола, дойти до шкафа, взять второй лист и вернуться за стол. 4. Отштамповать второе слово печатью "Стринг". 5. Положить второй лист справа от первого листа. 6. Встать из-за стола, дойти до шкафа, взять третий лист и вернуться за стол. 7. Отштамповать третье слово печатью "Стринг". 8. Положить третий лист справа от второго листа. 9. Взять скотч и склеить листы. ГОТОВО!!! *** А теперь давай посмотрим как работает штамп "СтрингСтроитель": 1. Встать из-за стола, дойти до шкафа, взять лист и вернуться за стол. 2. Отштамповать слово печатью "Стринг". 3. Отштамповать второе слово справа от первого печатью "Стринг". 4. Отштамповать третье слово справа от второго печатью "Стринг". ГОТОВО!!! В первом случае при использовании штампа "стринг" ты постоянно бегаешь до шкафа, ищешь скотч, возёкаешь листы по столу и тд... то есть ты тратишь много сил и энергии. А во втором случае разок сходила до шкафа села и тут же отшлёпала три слова. Разумеется ты бы выбрала второй вариант... Вот и JVM не любит лишние движение, поэтому он тоже отдает предпочтение StringBuilder, как и ты - штампу "СрингСтроитель"
Можно ещё проще написать public class Lesson23 { public static void main(String[] args) { StringBuilder s = new StringBuilder("Hello"); s.append(" My" + "Friend"); System.out.println(s.toString()); } }
Регистрируйтесь на курс "Продвинутая Java": ua-cam.com/video/rRe1vT0SDD8/v-deo.html
Практикуйтесь в написании Java кода: java-marathon.tilda.ws
StringBuilder sb = new StringBuilder("Hello"); не сработало, но методом тыка получилось с такой записью java.lang.StringBuilder sb = new java.lang.StringBuilder("Hello"); Не знаю, насколько это корректно?!
даже спустя 8 лет видео приятнее всех новых
Спасибо за еще один отличный урок! Я уверен, что аудитория этого канала должна вырасти.
Пожалуйста!
Короткий и понятный урок, в отличии от уроков платных площадок которые еще дольше идут. Спасибо большое, теперь все уложилось в голове)
раньше всегда искала видео с пометкой 2024*, но этот канал явное доказательство супер полезности и спустя сотню лет)
Лучше Ваших уроков на ютубе не найти. Спасибо!
Спасибо большое, за урок. Очень интересно и познавательно. Единственное, возможно я ошибаюсь. но вызов метода toString() уже не нужен (12:05), так как System.out.println() автоматически его вызывает. Поэтому достаточно написать System.out.println(sb); вместо System.out.println(sb.toString());
Нет, это не так работает. Метод sout(System.out.println()) просто выводит на экран переменную с тем же типом переменной. Вы можете проверить это с помощью метода instanceof, которая проверяет тип данной переменной
@@DnGJiJ Работает
Благодарю! Шикарные уроки. На практике, конечно, будет веселуха)
Читал книгу Шилдта, но ты объясняешь гораздо лучше!! Респект тебе!!!
Спасибо за курс, все уроки посмотрел с большим интересом.
Спасибо man. Классно объясняешь. Обязательно возьму твой курс для "не начинающих"..
И снова привет лучший JavaУчитель!)) Прежде чем приступить к просмотру, ставлю лайк и говорю СПАСИБО!!!
...ну а теперь, приступим к уроку.
человек 2 января после нового года записывал виде и выкладывал. респект! )
Все четко и понятно объясняешь Круто Спасибо
с Практикума пришел сюда за доп разъяснением))
спасибо за понятные уроки!
Крутой чувак. Купил курс Продвинутая Java. Понравилось.Рекомендую.
та же история) ох свезло выйти на этого человека! Сейчас досмотрю (повторно, для закрепления) курс для начинающих и приступлю к продвинутой. Успехов нам)
@@alekseyfrozis937 Как успехи спустя 10 месяцев?
@@NiflheimForever ага щас тут все понаписали тебе как они видосиков на ютубе насмотрелись и стали тру жава кодерами
@@MrNilf ну тогда поделись секретом как стать Java developer?
@@blackteam5273 Как я стал? 8 месяцев по 5 часов в день книги, код, решение задач, ревью кода, ютуб(но заметь я это на последнем месте написал) помимо этого общение в сообществах. Потом еще месяц мок интервью и не только технические. Заработал позвоночную грыжу... 13 собесов -> 8 оферов
спасибо за проделанный труд!
9:31 То есть, если конкатенируем строки обычным образом, то создаются два новых объекта, так как две операции “+”? Или объект прошлой конкатенации str1+str2 будет удален после того как мы плюсанем +str3 и это удаление будет являться дополнительной операцией, которая была бы нежелательна с точки зрения оптимизации? Или дело не в удалении, а в создании лишнего объекта? Я не совсем понимаю в чем замедление быстродействия происходит по сравнению со СтрингБилдером
При каждой конкатенации строк под капотом перегруженного оператора + создается объект StringBuilder и используется метод append, т.е мы прилично загружаем память, когда пользуемся объектом StringBuilder явно, мы создаем объект один раз и пользуемся его функционалом без создания новых объектов.
Благодарю! Очень полезная информация
Спасибо за урок!Все работает,все понятно!
Классная тема этот StringBuilder.
Всё очень внятно и полезно и интересно! Огромная Благодарность!
На 9:53 я не понял, что случилось? Сначала говорилось, что удаляет JVM эти строки, которые до конкотенации были, потом "конечно нет". Так запутывает эта поправка.
обожаю ваши уроки!!! спасибо большое 💜
Рад стараться :)
@@alishevN Привет Наиль! Сколько стоит курс?
На 10:55 -10:58 - цитата дословно "т.е. объекты класса String могут изменяться в ходе программы" - оговорка, наверное. Речь об объектах класса StringBuilder? они именно mutable (изменяемые).
Да, верно
Спасибо за контент! Стоило бы добавить что StringBuilder внутри работает с массивом байтов и поэтому не создают новые строки в string pool
спасибо братан, все очень ясно и понятно, желаю удачи :)
Спасибо! Отличный урок!
Спасибо большое за разъяснение
Огромное спасибо! Супер урок!
Спасибо, как всегда все доступно.
StringBuilder sb = new StringBuilder();
sb.append("улыбок тебе дед мокар");
sb.reverse();
System.out.println(sb.toString());
Хаккерство!)))
ахахахахах
Отлично, спасибо!
Пожалуйста!
значит, можно и сложить строку с другой, и вывести её за одну инструкцию вывода на экран:
System.out.println(sb.append("yes").toString());
Спасибо)Все понятно)
Все понятно. Спасибо!
Спасибо ! 👍
Отличное видео!
Т.е. переопределённый х на первоначальное значение не ссылается? x.toUpperCase "превращается" в новое значение?
У меня получилось,чтотназвание главного класса и метода объекта были одинаковые.
Поэтому java не поняла,что я хотел.Я поменял название главного класса на другое и у меня пошло.У меня в этом была проблема.
Спасибо за контнт)))))
Усе понятно шеф.
как подключить несколько проектов в intelij idea? сделай плизз мини урок.
Если написать System.out.println(sb); программа заработает .... почему тогда писать System.out.println(sb.toString());?
для возврата к стрингу
Действительно, в данном случае можно не вызывать метод toString() для объекта класса StringBuilder, так как этот объект при выводе на экран будет иметь вид строки, который нам и нужен. Другое дело, что для других классов приходится переопределять логику этого метода, так как он будет не совсем корректно отображать объекты в виде строки. Скажу больше, мы могли не писать этот метод хотя бы потому, что он и так вызывается неявным образом при вызове метода System.out.println(). То бишь, даже если мы явно не вызываем метод toString(), для какого бы то ни было объекта, он всё равно будет вызван без нашего участия. Следуя этой логике, можно прийти к выводу, что даже при написании System.out.println(sb); без .toString(), метод .toString() всё равно будет вызываться внутри метода System.out.println(). Вывод: System.out.println(sb); и System.out.println(sb.toString()); это одно и то же (эти 2 строчки полностью эквивалентны).
Метод print перегружен. Поэтому для разного типа входных параметров у него своя логика. Получая на вход объект он ищет toString, если он не переопределен, то вызывается метод родителя (в конечном счете это Object)а это вывод имени класса и хэшкода разделенные собачкой( если не ошибаюсь)
@@МаксимШильвян-ж4ы он не перегружен, просто класс Object при себе имеет метод toString()
Все охуенно....но делайте техст больше...к Вам УЖЕ приходят слепые
Любая цепочка конкатенаций проходит через промежуточный StringBuider, а потом вызывается конструктор String и возвращается новая строка. Чтобы в этом убедиться, достаточно посмотреть код JVM
Т.е. делаем просто через + и не пользуемся StringBuider?
@@Dmitry_RS зависит от многих факторов
@@nikiforovpteacher Если не затруднит можете подробнее написать от каких, переучиваюсь сейчас с php - хочу сразу понять как делать правильно.
@@Dmitry_RSStringBuilder - это класс, предоставляющий удобные методы для работы с изменяемыми строками. Он позволяет выполнять множество операций с текстом без создания дополнительных объектов в памяти, что делает его более эффективным для конкатенации большого числа строк. StringBuilder рекомендуется использовать, когда вам необходимо собирать или изменять строки в циклах или приложениях с большим объемом операций над строками. Объединение строк с помощью оператора + является более простым, но менее эффективным способом объединения небольшого числа строк. Хотя использование + для объединения строк удобно и читабельно, оно неэффективно для случаев, когда объединяется большое количество строк или выполняется множество операций над строками. Отличие между StringBuilder и объединением строк через + заключается в их производительности. Когда объединяется большое количество строк, использование StringBuilder может существенно увеличить производительность вашего кода, так как он позволяет избежать создания множества промежуточных строк в памяти, что приводит к меньшему потреблению ресурсов и более быстрой работе.
@@Dmitry_RSВажно выбирать подходящий метод в зависимости от конкретного сценария. Если вам нужно объединить всего несколько строк или выполнять эту операцию редко, оператор + может быть вполне удовлетворительным. Однако, если вам необходимо объединить много строк или проводить множество операций над текстом, то StringBuilder будет более предпочтительным выбором для оптимизации производительности.
спасибо!
Теперь IDE подсказывает что вызов toString у стрингбилдера в принципе не нужен) еще удобнее стало в общем.
Спасибо!
А в этом плейлисте вся база?? Или есть полный курс базы?
В java 17 ,представление инстанса стрингбилдер ,можно уже выводить без toString ,верно ? Или добавление toString обязательно ?
без можно
спасибо за уроки! только жаль, что еле слышно голос
Здраствуйте, Наиль хочу купить у вас курс, сколько стоит скажите пожалуйста?
Подскажите,пожалуйста,когда я попытался создать String x = new String(); у меня new String был подсвечен серым цветом,а у вас нет.В чем причина?Заранее благодарю!
Без toString() выводит норм
метод toString() вызывается неявно в System.out.println()
для чего в данном случаем при sout нужно писать toString() ? И без него прекрасно выводит, даже идея пишет, что нет необходимости вызывать метод
Просто вышла новая версия Java. Раньше нужно было писать toString(), а сейчас не обязательно. Таких мелочей очень много! Видео уже 5 лет!
спасибо за уроки!!! у меня вопрос: почему я не могу применить к объекту sb класса stringbuilder метод toUpperCase ни напрямую через точку, ни присвоением нового значения? спасибо.
Ответ кроется в самом вопросе. Метод toUpperCase применим к символам СТРОКИ. Именно по этому он не может применяться к ОБЪЕКТУ коим является stringbuilder.
Если проще то: stringbuilder sb это коробка. Внутри этой коробки находится некая строка, которая вызывается методом toString(). И уже к этой строке можно применить toUpperCase. Собственно это уже и есть код: sb.toString().toUpperCase;
Можно в два действия:
String out = sb.toString(); // Вывод строки объекта sb в переменную строки out.
out = out.toUpperCase(); // Применение метода к переменной, содержащей строку
Странно, когда я пишу код в Ide, у меня ошибка, при попытке написать Hello в стринг билдере. Более того, sb.append выделен красным. ide решила проблему c аппендом, создав ниже private void append(String s).
В видео ничего такого нет. Это может быть из за того, что за это время что-то в джаве поменялось?
У тебя название твоего java файла совпадает с классом StringBuilder. Измени свой класс на String_Builder
@@ChernovSanek бл ты гений! Спасибо.
дал себе привычку никогда не называть файлы названиями методов и прочего из-за возможных ошибок, но тут подзабил..
Супер!
Добрый день ! При запуске выдаёт ошибку : Error: Could not find or load main class StringBuilder
Кто-нибудь знает , что это?
Может забыли main добавить
А так System.out.println(x.toUpperCase()); выводит. И ничего не переприсваиваем. Почему?
Потому что ты в методе sout() сразу вызываешь метод апперКейс, который в свою очередь делает операции над переменно х и нет смысла заново присваивать)
Хотя наверное спустя 2 года немного поздновато отвечать :D да и Вы если продолжили с тех пор заниматься уже наверняка должны были стать шарящим человеком))
Ураааа!Пошло,сам затупил.!!!
StringBuilder string = new StringBuilder("Hello");
System.out.println(string.toString());
string.append(" darkness").append(" my old friend");
System.out.println(string.toString()); - почему в этой строчке мы пишем "toString", а не просто string?
мушто метод подразумевает под собой конвертацию н-ого типа в String, оттуда и такое название, а string нам ничего не говорит, да и в стрингбилдере такого метода вроде нет
Если писать код вот так как на видео, то уже сразу вылезает какая-то не понятная ошибка
Почему-то мне приходится прописывать так:
public class StringBuilder {
public static void main(String[] args) {
java.lang.StringBuilder sb = new java.lang.StringBuilder("Hello");
sb.append(" my").append(" friend");
System.out.println(sb.toString());
}
}
Т.к. без java.lang. не работает append. С чем это можно быть связано?
названия класса измени, так как java использует твой класс с названием StringBuilder
Не работает код на версии 2017.3.5. Выкидывает ошибку:
Error:(30, 28) java: constructor StringBuilder in class StringBuilder cannot be applied to given types;
required: no arguments
found: java.lang.String
reason: actual and formal argument lists differ in length
Подскажите что делать,застрял.
Было бы здорово увидеть сам код.
У меня нет метода append
Всё очень понятно и доходчиво. По окончанию урока начал сам писать этот код со StringBuilder'ом, но почему-то на месте конструктора, куда мы вписывали "Hello", подчеркнули красным и попросили создать конструктор. Метод "append" почему-то не существует для них, тоже нужно самому создавать. Вот код:
public class StringBuilder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" my class");
}
}
Подскажите пожалуйста, вроде всё идентично с видео, а работать не хочет.
P.S. Оказывается, это происходило из-за того, что объект StringBuilder совпадал с названием класса. Если изменить название класса, то всё заработает. Но почему так?
Потому что твой класс называется также как и стандартный класс в java.lang. Конфликт с названиями. Ты пытался вызвать метод .append() дял своего класса
@@ChernovSanek разве можно создавать классы(доступные друг другу) с одинаковыми названиями, и, есть ли какой-то приоритет при создании ссылки на объект этого класса?
Супер! Только форматирование кода страдает...
Зачем tostring? И без него всё выводит
дак 7 лет назад какая версия java то была?)
У меня такая проблема,я не могу вписывать в условиях стринг билдера
ошибка
Было бы здорово увидеть сам код.
Добрый вечер, в первую очередь спасибо большое за то что вы делаете! Курс просто бомбовый))
И вопрос: почему для вывода на экран у sb нужно вызывать метод toString()? Без этого метода тоже все выводит.
Версия Java поумнела ;)
подтверждаю, видимо обновления в джаве
хороший урок, но им не хватает независимости от других, брать новые примеры, а не использовать старые и "подвязывать" к новым,дольше вникаешь
Спасибо большое за отличную подачу материала. Оставьте в описании видео кошельки для доната.
Спасибо вам! Эти уроки бесплатные :)
Нафиг ему ваш донат, по нему и так видно, что бабки лопатой гребет, а учит на чистом интузиазме практически.
посмотрел урок тяжело понимать так как я не давно начал смотреть видео ролики , может поэтому , читаю комменты всем всё понятно а мне нет! либо я тупой либо это люди раньше занимались программированием
Аудитория растет, но к сожалению новых уроков уже нет более 2-х месяцев
12:18
спасибо за уроки обясни ешё как запускать програмы на java в окне
без toString() тоже без проблем вывод происходит
а чем этот метод отличается от метода concat() , чем лучше или какие отличия ? на мой взгляд этот метод проще, не нужно создавать заранее ни чего отличного от обычного String, проще вывод...
пример:
String a = " text ";
a = a.concat("text two");
System.out.println(a);
вывод : text text two
отличия в так называемом "нерационального использования памяти". Твоим способом мусор остается в памяти, через билдер нет. Метод append принимает любой тип данных, а concat только string. А уж про всякие полезные методы билдера лучше самому почитать)
чуть не уснул
За такую работу со строками самому языку Java хочется поставить дизлайк конечно...
По теме с 11й минуты.
Не знаю нужно ли это автору, но я плюс-минус выровнял звук у видоса, могу скинуть, чтобы перезалить спустя 8 лет 😁
Не поняла разницу ,если честно.
Представь:
Ты сидишь за столом с двумя волшебными штампами. Они волшебный, потому что каждый раз, когда ты ставишь ими печать, они отпечатывают новое слово, которое ты задумала у себя в голове. Эти штампы называются "Стринг" и "СтрингСтроитель".
Кроме печатей также нужен лист бумаги, на котором, собственно этими штампами ставить печати.
Листы бумаги хранятся в шкафу в трёх метрах от стола, за которым ты сидишь и взять за раз можно только один лист.
Представила? Теперь давай выясним чем отличаются эти две печати. Как они работают:
Печать "Стринг" работает так, что за одном листке бумаги можно поставить только одну печать. Поэтому, если тебе надо напечатать предложение из трёх слов, то тебе потребуются следующие действия:
1. Встать из-за стола, дойти до шкафа, взять лист и вернуться за стол.
2. Отштамповать слово печатью "Стринг".
3. Встать из-за стола, дойти до шкафа, взять второй лист и вернуться за стол.
4. Отштамповать второе слово печатью "Стринг".
5. Положить второй лист справа от первого листа.
6. Встать из-за стола, дойти до шкафа, взять третий лист и вернуться за стол.
7. Отштамповать третье слово печатью "Стринг".
8. Положить третий лист справа от второго листа.
9. Взять скотч и склеить листы.
ГОТОВО!!!
***
А теперь давай посмотрим как работает штамп "СтрингСтроитель":
1. Встать из-за стола, дойти до шкафа, взять лист и вернуться за стол.
2. Отштамповать слово печатью "Стринг".
3. Отштамповать второе слово справа от первого печатью "Стринг".
4. Отштамповать третье слово справа от второго печатью "Стринг".
ГОТОВО!!!
В первом случае при использовании штампа "стринг" ты постоянно бегаешь до шкафа, ищешь скотч, возёкаешь листы по столу и тд... то есть ты тратишь много сил и энергии.
А во втором случае разок сходила до шкафа села и тут же отшлёпала три слова.
Разумеется ты бы выбрала второй вариант...
Вот и JVM не любит лишние движение, поэтому он тоже отдает предпочтение StringBuilder, как и ты - штампу "СрингСтроитель"
ну из-за дизайна видно что снимали 8 лет назад
Тема mutable и imutable не раскрыта. Беру складываю строки, они изменяются и те и те
В одном случае с String создаётся новая строка под капотом, а в StringBuinder работает быстро и как надо, просто добавляется к строке
друг, ты вообще видео смотрел? )) Особенно ту часть, про расход памяти и быстродействие.
Мне одному тихо или он действительно тихо говорит?
одному
урок отстой, ничого не слышно
Можно ещё проще написать
public class Lesson23 {
public static void main(String[] args) {
StringBuilder s = new StringBuilder("Hello");
s.append(" My" + "Friend");
System.out.println(s.toString());
}
}
а можно написать s.append (" my friend");
xD
Спасибо!