У нас есть класс Cat. Создаем объект cat:
Cat cat = new Cat("Vaska");
Где "Vaska" это присваиваемое объекту имя. То есть у нас в классе Cat есть конструктор:
public class Cat {
String name;
public Cat (String name) {
this.name = name; }
}
Объясните, пожалуйста, как работает класс String, у него тоже есть конструктор?
Например создаем объект s класса String:
String s = new String ("JavaRush");
Не совсем понятно, куда аргумент "JavaRush" потом уходит?
hidden #2062118
10 уровень
Вопрос №2 про класс String
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергеев ВикторMaster
6 мая 2019, 16:58
да, он уходит в конструктор класса String далее в зависимости от версии jdk сохраняется либо в массив char либо в массив byte.
Массивы сохраняются в куче. Куча - область оперативной памяти выделенная ОС для jvm, чтобы последняя могла работать.
+1
hidden #2062118
6 мая 2019, 18:06
Хорошо. Подскажите, пожалуйста, почему это одно и тоже ??
String str = new String("какая-то строка");
String str = "какая-то строка";
ведь в классе Cat мы не смогли бы наверно сделать такое сравнение
Cat cat = new Cat("Vaska");
мы четко понимаем что есть конструктор и он передает строку в String name.
Но у класса String все как-то по другой схеме.
0
hidden #598481
6 мая 2019, 18:10
Нет, вовсе не по другой схеме. Можешь открыть класс String и посмотреть:
Содержимое поля value исходной строки записывается в поле value создаваемого объекта. Конструктор по умолчанию (без аргументов, т.е. new String()) создает объект с value, равным value пустой строки.
+1
hidden #2062118
6 мая 2019, 19:12
Виктор, Vk спасибо за подробный ответ. Стало понятно где потом располагается аргумент.
0
hidden #598481
6 мая 2019, 20:13
Пожалуйста!
0
Сергеев ВикторMaster
6 мая 2019, 20:35
сравнивать значения можно по разному:
== сравнивает ссылку на объект
equals по дефолту так же сравнивает ссылку, но чаще всего его переопределяют и описывают как сравнивать объекты.
0
hidden #2062118
6 мая 2019, 21:31
Ребят, подскажите еще по поводу:
String str = new String("какая-то строка");
String str = "какая-то строка";
Riccio мне не понятно почему в классе String так можно создавать объект. А именно вот так
String str = "какая-то строка" ?????
и это одно и тоже что и
String str = new String("какая-то строка");
Это не совсем одно и тоже, в первом случае строка уходит в String Pool
Во втором случае строка уходит в новую область в памяти и не попадает в String Pool ( Подробно куда она уходит видно в классе String, отправленным VK)
Есть какая то формула что ли, если
String str = new String("какая-то строка");
то это эквивалентно
String str = "какая-то строка"
Тогда в классе Cat мы тоже можем также сделать?
Если
Cat cat = new Cat("Vaska");
то
Cat cat = "Vaska";
0
Стас ПасинковSoftware Developer в ZipyMaster
6 мая 2019, 23:36
насчет этого
то это один из любимых вопросов на собеседовании про метод intern() :) в принципе, пока это рановато учить, но раз уж вы заинтересовались и почитали про пул строк - тогда почитайте и как он работает. да и вообще зачем он нужен этот пул строк)
а насчет упрощенной записи создания объекта строки, то суть в том, что вот именно для строк решили сделать на уровне языка так, что объект строки можно создать напрямую, просто заключив в кавычки. просто чтобы не писать на каждом шагу new String(...)
это строковый литерал. как и 5 это интовый литерал. и 5L - лонговый. да, это та же пятерка, но разница некоторая все же есть :)
и нет, ни с одним другим классом в джаве нет такого же лайфхака, как и со строками. поэтому создать кота таким способом у вас не получится.
так работает только со строками. все :)
+4
hidden #2062118
7 мая 2019, 05:49
Понял! Станислав, спасибо!!!
+1