JavaRush /Курсы /Java Syntax /Преобразование к типу String

Преобразование к типу String

Java Syntax
10 уровень , 5 лекция
Открыта

— Сейчас будет маленькая, но интересная тема – преобразование к типу String.

— В Java к типу String можно преобразовать любые типы данных.

— Звучит заманчиво.

— На самом деле все еще лучше. Практически все типы можно приводить к типу String неявно. Лучше всего это заметно, когда мы складываем две переменных: String и «не String». При этом «не String» переменная преобразовывается к типу String.

— Вот посмотри пару примеров:

Команда Что происходит на самом деле
int x = 5;
String text = "X=" + x;
int x = 5;
String s = "X=" + Integer.toString(x);
Cat cat = new Cat("Vaska");
String text = "My cat is " + cat;
Cat cat = new Cat("Vaska");
String text = "My cat is" + cat.toString();
Object o = null;
String text = "Object is " + o;
Object o = null;
String text = "Object is " + "null";
String text = 5 + '\u0000' + "Log";

int i2 = 5 + (int) '\u0000';
String text = Integer.toString(i2) + "Log";
String text = "Object is " + (float) 2 / 3;

float f2 = ((float) 2) / 3;
String text="Object is " + Float.toString(f2);

Вывод: Если мы складываем String и «любой другой тип», то второй объект преобразуется к типу String.

— Обрати еще внимание на четвертую строку таблицы. Все операции выполняются слева направо, поэтому сложение 5 + ‘\u0000’ происходит как сложение целых чисел.

— Т.е. если я напишу, код типа: String s = 1+2+3+4+5+"m", то получу s = "15m" ?

— Ага. Сначала произойдет сложение чисел, а затем – преобразование их к строке.

10
Задача
Java Syntax Pro, 10 уровень, 5 лекция
Недоступна
Проверка URL-адреса
В этой задаче тебе нужно выполнить проверку URL-адреса. Простая схема URL-адреса выглядит так: <сетевой протокол>://<название ресурса>.<домен> Метод checkProtocol(String) проверяет, какой сетевой протокол (http или https) у URL-адреса, полученного входящим параметром, и возвращает результат провер
10
Задача
Java Syntax Pro, 10 уровень, 5 лекция
Недоступна
Поиск в строке
Метод getIndexFromFirstWord(String, String) и метод getIndexFromLastWord(String, String) принимают строку и слово. Нужно, чтобы метод getIndexFromFirstWord(String, String) вернул индекс первого символа первого слова (второй параметр метода) в строке (первый параметр метода).
10
Задача
Java Syntax Pro, 10 уровень, 5 лекция
Недоступна
Обновление пути
Реализуй метод changePath(String, String) так, чтобы он заменял версию jdk в пути, полученном первым параметром метода, на версию, полученную вторым параметром, и возвращал новый путь. Версия jdk начинается со строки "jdk" и заканчивается на "/". Пример: путь - "/usr/java/jdk1.8/bin/" версия jdk - "jdk-13"
Комментарии (91)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Павел Соловьёв Уровень 16
24 июня 2022

String s = 1+2+3+4+5+"m";
System.out.print(s);
15m

String s = "m" +1+2+3+4+5;
System.out.print(s);
m12345
Евгений N Уровень 23
6 мая 2022
вроде мы это на 2 уровне проходили уже....
Денис Уровень 23
25 марта 2022
String text = 5 + '\u0000' + "Log"; Зачем это тут? Я понял что '\u0000' это что-то вроде пустого места или nop в ассемблере, но вот сейчас здесь в этой теме, в этой строчке зачем это написано?
Юличка Уровень 32
6 июня 2021
пока смутненько смутненько конечно...
Anonymous #2277416 Уровень 13
20 сентября 2023
Вот интересно, к 32 лвлу прояснение появилось? 🙃
Alikhan Уровень 20
29 мая 2021
— Т.е. если я напишу, код типа: String s = 1+2+3+4+5+"m", то получу s = "15m" ? не понял, это же логично 15+м, не?
Дмитрий Б.Г. Уровень 32
1 июня 2021
+ находится вне кавычек " " и по этому работает исключительно как оператор (конкатенирует число 15 и строку "m". Как бы он попал внутрь строки, чтобы получилось 15+m?
19 октября 2021
Ну теоретически могло бы быть так: s="12345m"
Michael Ginzburg Уровень 21
20 октября 2021
Теоретически могло быть m12345. Но для этого надо написать: String s = "m" + 1 + 2 + 3 + 4 + 5;
10 января 2021
строгая типизация? только видимо string писал другой кодер. в паскале строгая без приведения ни чего не сложишь, а java все на уровне описания заканчивается, а после танцуй рванина.
selfer Уровень 17
24 января 2021
Ну так и тут сначала происходит приведение к типу String методом toString(), а потом конкатенация. Просто тут сделано удобнее и не надо ручками каждый раз вызывать этот метод.
24 января 2021
имел ввиду именно этот метод по умолчанию. если просмотрел, что не то сложил, получишь баг, а не ошибку про неправильные типы. "sum:"+2+2 "sum:"+(2+2) и дело вовсе не в реализации,а именно в отсутствии жесткого контроля за типами.
Anonymous #2497433 Уровень 35
6 февраля 2021
просто String - это класс не забывай
6 февраля 2021
пусть будет так. String.length(); List.size(); int[].length; и работает toString по разному у классов где значение покажет, где линк, где hash. и если бы не ide все это просто НЕ типизированая каша. обертки с разными методами и полями. которые надо запоминать что и как стыкуется. java не похож на язык для написания кода в блокноте.
Anonymous #2497433 Уровень 35
7 февраля 2021
toString работает по разному, потому что он у некоторых переопределен size(), length() - это методы a length - это свойство, оно только для массива
Justinian Уровень 41 Master
14 февраля 2021
строгая типизация строгой типизации рознь. Есть языки и построже, например Ада, Си, на которых в космос летают, есть языки по сравнению с которыми, джава вершина строгой типизации, например джава скрипт. Пример текст + 2 +2, это уровень первых шагов джава разработчика, перегруженный оператор сложения это азы азов, которые по недосмотру гипотетически можно наверное допустить ошибку, но ракета в космос не упадет, программа не остановиться, ну кусок текста пойдет куда-то некорректно. Между программистом и отгрузкой кода заказчику 10 заслонов , на каждом из которых эта ошибка может быть выявлена. И кстати

"sum:"+2+2
"sum:"+(2+2)
не встретить на реальном проекте, на нормальном по крайней мере, в этой одной маленькой строке нарушены как минимум три правила-принципы написания кода на джаве, поэтому практикующий джавист так не напишет, ни первый ни второй вариант. Собственно этих правил написания кода на джаве хватает, и как результат их соблюдения, ошибки допускаются в разы реже, а их выявить на этапе написания кода - в разы легче. Но правила потом, а сначала нужна база. Для меня джава первый ООП язык и после паскаля была ломка процедурно-структурного мышления, но со временем прошла, привык :) Другой язык, другие правила, другой контекст, другой монастырь, другой устав.
Евгений N Уровень 23
6 мая 2022
а у меня после Object-паскаля растет ненависть к java за отсутствие логики и непредсказуемость.
Justinian Уровень 41 Master
14 мая 2022
Бывает, когда мы что-то не понимаем это естественно. Логика и предсказуемость в джаве есть, но ее нужно увидеть, успеет ли человек увидит это до того как он махнет рукой это сугубо индивидуально :) Когда мы погружаемсся в новую для нас сферу, нам очень часто приходится принимать на веру или как есть, и только спустя время мы начинаем видеть логику, взаимосвязь и видеть систему. Поначалу это всегда сложно, язык программирования это, спорт или любая деятельность.
Евгений N Уровень 23
15 мая 2022
ну к примеру много ли предсказуемости в том что для списков команды add & set, а для Map уже зачем-то put & replace 😋
Justinian Уровень 41 Master
17 мая 2022
Конечно много. Почему в автомобиле капот и багажник, а в корабле корма и нос? Потому что это разные вещи, хотя оьа они транспортные средства. Map не относится к коллекциям элементам, поскольку в отличие от списка, и других коллекций, Мап хранит не значения элементов, а набор пар ключ-значения. То есть список и Мап это два разных абстрактных типа данных с разными функциями и особенностями. Поэтому логично, что методы будут называться по разному и это касается не только джавы, во многих языках программирования существуют разные методы операции, add, put, push, insert и тд, ноги у этих методов растут с компьютерных наук, языков программирования сотни, и в каждом отображено по-разному. Но логика есть, если есть два различных типа , которые предназначены для разных вещей, то ничего удивительного что разные названия методов называют разные по сути операции. Список это абстрактный дататип с логическим индексом. Есть у нас совокупность элементов одного типа хранящихся последовательно, мы к ним добавляем очередной элемент. Как мы говорим, если мы присоелиняем в цепочку? Добавляем , add. Мапа это ассоциативный массив, абстрактный дататип хранящий пары ключ-значения. В мапу мы значение помещаем. Есть коробка хранящая пары ключ-значения, здесь понятие последовательности элементов нет вовсе, значения мапятся на ключи, порядок тоже хитрый и переставляющийся. Мы не знаем в какое место вставим, в какое подойдет такое и вставится внутрь короьки. Как мы называем, если нам в коробку нужно поместить что-то, на место, которое выделено под него. Put, положить. Тоже самое set/replace. Есть ряд таймеров, выставленных на какое-то время это список, упорядоченная по индексу коллкция элементов одного типа. Мы хотим поменять значение таймера в 5ой ячейке, это set. Мы берем 5ую ячейку и присваиваем новое значение. В каждой ячейке то ссылка, и мы присваеваем set новую. Почему не подходит replace? Потому что замены не происходит. У нас происходит перетирание конкретной ячейки.
Justinian Уровень 41 Master
17 мая 2022
Мы не говорим "я засенил таймер с 5 минут на 7", мы говорим "стояло 5, я поставил set на 7". Другое дело мапа, ее устройство на порядок сложнее, мы в автомобиле не говорим обычно я поставил новое колесо, я поставил свечу, мы говорим я заменил колесо, заменил свечу, поскольку речь о более сложной совокупности механизмов и конструктивных элементов. Если мы заменяем пару ключ значения, суть не в перетирании и я даже не знаю уак это было бы map.set("key", value);, set это присвоить, присвоить кому чему? Мапе. Я присваиваю автомобилю колесо..ну так себе звучит. Суть операции не в присваивании, для этого есть put, а суть в том, ято у нас внутри коробки мапы, есть сложный элемент - пара клбч значение, мы ее вытаскиваем, рарываем связь ключ значение, меняем значение и помещаем обратно. На замену детали это похоже. На присваивание детали нет. Поэтому язык программирования это языки. В них разные слова для разных ситуаций, отталкиваться нужно не от внешних признаков, а от сути операций и контекста. Но для этапа знакомства с языком это нормально , опыт на других языках это зло и благо. Благо, поскольку это опыт, много схожего, более широкое и глубокое и разностороннее понимание, больше идей и понимания уак решить проблему и в чем ее суть. Зло, поскольку идет деформация, филологам известна такая фраза ложные друзья переводчика, сувенир это что? Подарок, подсказывает мозг. А в оригинале воспоминание. Так и опыт на других языках уменьшает гибкость восприятия, там где новички без опыта воспринимают все как есть, люди с опытом в других языках их мозг будет цепляться за нестыковки и прежний опыт. Но новый язык программирования это новый устав, нового монастыря , новый самовар. Но это процесс адаптации, ломка, она быстро проходит, поскольку дальше общего будет мало и пойдет фокус на других вещах. Но джава, один из основных языков бекенда, а большие сложные приложения без языков с четким соблюдением логики - построить просто невозможно, популярность джавы зыблется на ней
Евгений N Уровень 23
19 мая 2022
судя по вашей логике в set тоже должна бы быть операция put. 😝
Justinian Уровень 41 Master
19 мая 2022
Это не моя логика, это логика бородатых математиков и ученых с мировым именем и логика Computer science. Я лишь ее пытаюсь объяснить, хотя объяснить эволюцию лексикосемантических систем сложновато без подготовки. В нескольких словах, разный контекст - разные инструменты, разные конструкции - разные названия методов. Если кошка мяукает, почему нелогично что собака лает? Хотя у собаки тоже есть лапы и хвост, значит по логике должна мяукать? Сэт и мапа это совершенно разные дататипы, а следовательно разный контекст. Сэт это что? Список неповторяющихся элементов. Список. В списке у нас add, в сэт у нас add. Повторюсь, на начальном этапе многое будет казаться нелогичным, ну сам посуди, мой заезженный пример но тем не менее, я насмотрелся на Майка Тайсона и решил стать боксером и там всех в нокаут бум бум отправлять. Прихожу на тренировку, мне то дают в руку скакалку, то заставляют отжиматься, то бегать. Где логика? Я же не на беговую секцию пришел! А скакалка, мне что, заскакать до нокаута противника? Или заотжимать? Как происходит в реальной жизни, когда человек решает чем-то заниматься, его знания в новой сфере логично ограничены (иначе он бы преподавал, а не учился), и он на старте сталкивается с валом непонятного и необъяснимого. На практике, человек воспринимает все как есть и со временем он начинает понимать, и почему так, а почему сяк, и почему вот так. Нельзя называть нелогично, все то, что не соотносится со своим представлением, ведь работа над расширением последнего занимает всю жизнь :)
Никита Уровень 10
16 декабря 2020
Элли: *что-то говорит* Амиго: *смотрит на неё, в голове у него явно не лекции* Амиго: "Звучит заманчиво".
Andrew Уровень 15
16 января 2021
Амиго: "А она ничего такая". Элли: *может кофейку*
BotGabe Уровень 1 Expert
3 марта 2021
а дальше: "Продолжение после подписки"
Виталий Гнутов Уровень 19
28 ноября 2020
А на паскале так же будет?
bighugеmistеr Уровень 15
30 ноября 2020
на Паскале нет
🦔 Виктор Уровень 20 Expert
6 ноября 2020
TL;DR «Вывод: Если мы складываем String и «любой другой тип», то второй объект преобразуется к типу String». Хоспади, пожалуйста, только не очередные задачи в духе "угадай мелодию"...
Andrew Уровень 15
16 января 2021
TL;DR (англ. too long; didn't read — слишком длинно, не читал) "да и .. с ним"
Эдем Уровень 26
1 ноября 2020
Конечно, совсем неочевидный момент, что Java, имея достаточно строгую типизацию, позволяет складывать строку с чем угодно