Инициализация строки с помощью " " в Java: особый случай
Класс String в Java, несмотря на то, что он является объектно-ориентированной сущностью, может быть инициализирован используя двойные кавычки. Эта особенность вызвала вопрос: как это возможно в рамках объектно-ориентированного программирования?
Уникальный подход Java
Вопреки представлению о том, что все в Java должно Будучи объектом, разработчики языка решили сохранить примитивные типы данных из соображений производительности. Примитивы, находящиеся в стеке вызовов, обеспечивают более быструю обработку и меньшее использование памяти по сравнению с объектами, размещаемыми в куче.
Чтобы сбалансировать эти соображения, Java String создан как гибрид. Он ведет себя как примитив, но также обладает некоторыми характеристиками объекта.
Пул строковых литералов
Когда строковый литерал создается с использованием двойных кавычек, он напрямую присваивается пул строковых литералов. В пуле хранится общий репозиторий часто используемых строк для оптимизации использования памяти. Последующие ссылки на один и тот же строковый литерал извлекаются из этого пула, что позволяет избежать ненужного дублирования. оператор, он размещается в куче, как и другие объекты. Эти объекты String различны и занимают собственное пространство памяти.
Сравнение и хранение
Чтобы проиллюстрировать это поведение, рассмотрим следующий фрагмент кода:
Строка s1 = «Привет»; // Строковый литерал Строка s2 = «Привет»; // Строковый литерал Строка s3 = s1; // Та же ссылка String s4 = новая строка («Привет»); // Строковый объект String s5 = новая строка («Привет»); // Строковый объектКак показано на диаграмме, s1, s2 и s3 указывают на один и тот же строковый литерал в пуле, а s4 и s5 являются разными объектами String.
Последствия и меры предосторожностиString s1 = "Hello"; // String literal String s2 = "Hello"; // String literal String s3 = s1; // Same reference String s4 = new String("Hello"); // String object String s5 = new String("Hello"); // String object
Это уникальное поведение имеет важные последствия для манипуляций со строками. Поскольку литералы являются неизменяемыми и общими, их изменение влияет на все ссылки на них. Однако объекты String являются изменяемыми, что позволяет вносить изменения в определенные экземпляры, не затрагивая другие.
Учет этих различий имеет решающее значение для эффективной и правильной обработки строк в программах Java.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3