Как можно инициализировать строку с помощью ""?
10712 просмотра
10 ответа
Если String - это класс, как и любой другой, как его можно инициализировать с помощью двойных кавычек?
Автор: splitgames Источник Размещён: 13.11.2019 11:32Ответы (10)
292 плюса
Java String является особенной
Разработчики Java решили сохранить примитивные типы в объектно-ориентированном языке вместо того, чтобы делать все объектами, чтобы улучшить производительность языка. Примитивы хранятся в стеке вызовов, которые требуют меньше места для хранения и дешевле манипулировать. С другой стороны, объекты хранятся в куче программы, что требует сложного управления памятью и большего объема памяти.
По соображениям производительности Java 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
объекты, выделенные через новый оператор, хранятся в heap
, и для этого же содержимого нет общего хранилища.
50 плюса
Java рассматривает String как специальный класс, вы можете инициализировать обоими способами
Прямое присвоение литерала
String a = "adsasdf";
В качестве других объектов используется новое ключевое слово
String a = new String("adsasdf");
Вы должны быть особенно внимательны, если хотите сравнить со ==
знаком:
String a = "asdf";
String b = "asdf";
System.out.println(a == b); // True
System.out.println(a.equals(b)); // True
String a = new String("asdf");
String b = new String("asdf");
System.out.println(a == b); // False
System.out.println(a.equals(b)); // True
Это потому, что в первом случае объекты a и b хранятся в вызываемом literal pool
объекте, и они оба ссылаются на один и тот же объект, поэтому они равны в обоих отношениях.
Но во втором случае a и b ссылаются на разные объекты, например, когда мы инициализируем любые другие объекты. поэтому они неравны по сравнению с ==
оператором, тогда как они равны по значениям.
18 плюса
String получает особую обработку в JLS: это один из двух не примитивных типов, для которых существуют литералы (другой - Class
) * .
Из JLS :
Строковый литерал - это ссылка на экземпляр класса `String [...].
* ну, есть также «нулевой тип» с его «нулевым литералом» null
, но большинство людей не думают о «нулевом типе» как о правильном типе.
15 плюса
Это особенность языка Java. Строковые литералы в исходном коде получают специальную обработку.
Спецификация языка здесь просто говорит, что строковый литерал имеет String
тип
5 плюса
Текст внутри двойных кавычек создает буквальный String
объект.
String myString = "Some text";
Код выше создает String
объект, используя двойные кавычки.
4 плюса
Строки очень часто используются в языке программирования. Поскольку Java является объектно-ориентированным, строка является объектом. Чтобы избежать громоздкой новой String ("someString"); оператор каждый раз, когда вам нужен строковый объект java позволяет вам просто создать строковый объект, используя строковый литерал.
Но вы должны иметь в виду равенство строк. Вот короткий тест JUnit, чтобы продемонстрировать, что я имею в виду.
@Test
public void stringTest() {
// a string literal and a string object created
// with the same literal are equal
assertEquals("string", new String("string"));
// two string literals are the same string object
assertSame("string", "string");
// a string literal is not the same object instance
// as a string object created with the same string literal
assertFalse("string" == new String("string"));
// java's String.intern() method gives you the same
// string object reference for all strings that are equal.
assertSame("string", new String("string").intern());
}
Автор: René Link
Размещён: 05.07.2013 01:05
2 плюса
Просто чтобы упомянуть. Строковый литерал - это ссылка на экземпляр класса String, который вы можете написать так:
"ABC" .getBytes (); "А: б: в" .split ( ":"); "愛" .codePointAt (0);Автор: mkdev Размещён: 05.07.2013 01:47
2 плюса
- String - это класс в Java . Вы правы в этом, поэтому мы всегда можем инициализировать с new
ключевым словом.
- Но когда мы делаем что-то вроде:
String s = "";
Вышеприведенный оператор помечается компилятором как специальный объект String, а затем JVM во время загрузки класса (загрузка выполняется до инициализации), видит это так называемый строковый литерал , который хранится в пуле строкового литерала .
- Таким образом, String может быть создан с помощью new()
и с помощью ""
метода, но последний предоставляет строковый литерал, который остается в куче, даже когда нет ссылки на этот строковый объект, поскольку он имеет ссылку из пула строковых литералов.
2 плюса
Java делает для нас двухэтапный процесс.
String str = "hello";
эквивалентно
char data[] = {'h', 'e', 'l' , 'l', 'o'};
String str = new String(data);
Как [.NET] [1] получил похожую вещь.
String(Char[]) constructor
делает
String(char[] value)
Добавление ссылок: -
- http://docs.oracle.com/javase/6/docs/api/java/lang/String.html
- http://msdn.microsoft.com/en-us/library/system.string.aspx
1 плюс
Java.lang.String
это не просто класс. Это неотъемлемая часть основного языка. У компилятора есть синтаксический сахар для него. Например, ""
это как сокращение для new String("")
. При написании ""
компилятор оптимизирует идентичные строки для одного и того же экземпляра для экономии места."a" + 5 == "a5" ==> true
У компилятора есть синтаксический сахар для множества вещей, включая отсутствие необходимости вставлять / снимать коробку между версиями объекта и их нативными типами, нет родительских средств Object, конструктор по умолчанию, ...
Автор: Sylwester Размещён: 05.07.2013 12:54Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- java Библиотека Java SWIFT
- java Выключение компьютера
- java Как я могу воспроизвести звук на Java?
- java Когда выбирать отмеченные и непроверенные исключения
- string В чем разница между строкой и строкой в ??C #?
- string Почему в Ruby нет реального StringBuffer или StringIO?
- string Преобразовать строку в перечисление в C #
- string Самый эффективный способ объединения строк?
- string Экранирование строк HTML с помощью jQuery
- string PHP эквивалент .NET / Java toString ()
- string Как отсортировать список строк?
- string Как сгенерировать случайную буквенно-цифровую строку?
- string Как разбирать строку в nullable int