Elettracompany.com

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java lang charsequence

CharSequence против строки в Java?

программирование в Android, большинство текстовых значений ожидается в CharSequence .

почему это? В чем преимущество, и каковы основные последствия использования CharSequence над String ?

каковы основные различия и какие проблемы ожидаются при их использовании и преобразовании из одного в другой?

9 ответов

строки являются CharSequences, Так что вы можете просто использовать строки и не беспокоиться. Android просто пытается быть полезным, позволяя вам также указывать другие объекты CharSequence, такие как StringBuffers.

эта диаграмма классов может помочь вам увидеть общую картину строковых типов в Java 7/8. Я не уверен, что все они присутствуют в Android, но общий контекст все еще может оказаться полезным для вас.

кроме того, обратите внимание на комментарии по принято отвечать. The CharSequence интерфейс был модифицирован на существующие структуры классов, поэтому есть некоторые важные тонкости ( equals() & hashCode() ). Обратите внимание на различные версии Java (1, 2, 4 & 5) с метками на классы / интерфейсы-довольно много оттока на протяжении многих лет. В идеале CharSequence было бы с самого начала, но такова жизнь.

Я считаю, что лучше всего использовать CharSequence. Причина в том, что String реализует CharSequence, поэтому вы можете передать строку в CharSequence, однако вы не можете передать CharSequence в строку, поскольку CharSequence не реализует String. Кроме того, в Android EditText.getText() метод возвращает редактируемый, который также реализует CharSequence и может быть легко передан в один, а не в строку. CharSequence обрабатывает все!

в целом использование интерфейса позволяет варьировать реализацию с минимальным сопутствующим ущербом. Хотя java.ленг.Строка очень популярна возможно, что в определенных контекстах может потребоваться использовать другую реализацию. Создавая API вокруг CharSequences, а не строк, код дает возможность сделать это.

Это почти наверняка из соображений производительности. Например, представьте себе парсер, который проходит через 500k ByteBuffer, содержащий строки.

существует 3 подхода к возвращению содержимого строки:

создайте строку[] во время синтаксического анализа, по одному символу за раз. Это займет заметное количество времени. Мы можем использовать == вместо .равно для сравнения кэшированных ссылок.

создайте int[] с смещениями во время синтаксического анализа, затем динамически строить строку, когда get() происходит. Каждая строка будет новым объектом, поэтому нет кэширования возвращаемых значений и использования ==

построить CharSequence[] во время разбора. Поскольку новые данные не сохраняются (кроме смещений в байтовый буфер), синтаксический анализ намного ниже, чем #1. В get time нам не нужно создавать строку, поэтому производительность get равна #1 (намного лучше, чем #2), так как мы возвращаем только ссылку на существующий объект.

In в дополнение к преимуществам обработки, которые вы получаете с помощью CharSequence, вы также уменьшаете объем памяти, не дублируя данные. Например, если у вас есть буфер, содержащий 3 абзаца текста, и вы хотите вернуть все 3 или один абзац, вам нужно 4 строки, чтобы представить это. При использовании CharSequence требуется только 1 буфер с данными и 4 экземпляра реализации CharSequence, отслеживающей начало и длину.

Точная разница между CharSequence и строкой в java

Я читал этот предыдущий пост . Может ли кто-нибудь сказать, в чем заключается точное различие между CharSequence и String, кроме того факта, что String реализует CharSequence и что String является последовательностью символов? Например:

Что происходит, когда «hello» присваивается obj и снова str ?

8 Ответов

Общие различия

Есть несколько классов, которые реализуют интерфейс CharSequence помимо String . Среди них есть такие

  • StringBuilder для последовательностей символов переменной длины, которые могут быть изменены
  • CharBuffer для низкоуровневых последовательностей символов фиксированной длины, которые могут быть изменены

Любой метод, который принимает a CharSequence , может одинаково хорошо работать со всеми из них. Любой метод, который принимает только String , потребует преобразования. Таким образом, использование CharSequence в качестве типа аргумента во всех местах, где вы не заботитесь о внутренних элементах, является разумным. Однако вы должны использовать String в качестве возвращаемого типа, если вы действительно возвращаете String , потому что это позволяет избежать возможных преобразований возвращаемых значений, если вызывающий метод действительно требует String .

Также обратите внимание, что карты должны использовать String в качестве типа ключа , а не CharSequence , так как ключи карты не должны изменяться. Другими словами, иногда непреложная природа String имеет существенное значение.

Конкретный фрагмент кода

Что касается кода, который вы вставили: просто скомпилируйте его и посмотрите на байт-код JVM, используя javap -v . Там вы заметите, что и obj , и str являются ссылками на один и тот же постоянный объект. Поскольку String является неизменным, этот вид обмена является правильным.

Оператор + String компилируется как вызовы различных вызовов StringBuilder.append . Так что это эквивалентно

Должен признаться, я немного удивлен, что мой компилятор javac 1.6.0_33 компилирует + obj , используя StringBuilder.append(Object) вместо StringBuilder.append(CharSequence) . Первый, вероятно, включает вызов метода toString() объекта, тогда как последний должен быть возможен более эффективным способом. С другой стороны, String.toString() просто возвращает сам String , так что штраф там невелик. Таким образом, StringBuilder.append(String) может быть более эффективным примерно при одном вызове метода.

Один-это интерфейс ( CharSequence ), а другой-конкретная реализация этого интерфейса ( String ).

В качестве интерфейса обычно используется CharSequence , а не String , но некоторые искажения истории привели к тому, что интерфейс был определен спустя годы после реализации. Таким образом, в более старом APIs мы часто видим String , а в более новом APIs мы склонны видеть CharSequence , используемый для определения аргументов и возвращаемых типов.

Подробности

В настоящее время мы знаем, что в целом фреймворк API/должен фокусироваться на экспорте интерфейсов в первую очередь и конкретных классов во вторую очередь. Но мы не всегда так хорошо знали этот урок.

Класс String занял первое место в классе Java. Только позже они установили фронтальный интерфейс, CharSequence .

Запутанная История

Немного истории может помочь в понимании.

В первые дни своего существования Java был спешно выведен на рынок немного раньше своего времени из-за интернета/веб-мании, оживлявшей индустрию. Некоторые библиотеки были не так хорошо продуманы, как следовало бы. Обработка строк была одной из таких областей.

Кроме того, Java была одной из самых ранних сред неакадемического объектно-ориентированного программирования производственной направленности (OOP) . Единственными успешными реальными реализациями rubber-meets-the-road из OOP до этого были некоторые ограниченные версии SmallTalk , затем Objective-C с NeXTSTEP / OpenStep . Так что многие практические уроки еще предстояло усвоить.

Читать еще:  Графики в javascript как построить

Java начиналось с классов String и StringBuffer . Но эти два класса не были связаны друг с другом ни наследственностью, ни интерфейсом. Позже команда Java признала, что должна была существовать объединяющая связь между реализациями, связанными со строками, чтобы сделать их взаимозаменяемыми. В Java 4 команда добавила интерфейс CharSequence и ретроактивно реализовала этот интерфейс на String и String Buffer, а также добавила другую реализацию CharBuffer . Позже в Java 5 они добавили StringBuilder , в основном несинхронизированную и поэтому несколько более быструю версию StringBuffer .

Таким образом, эти строковые классы немного запутаны и немного запутаны, чтобы узнать о них. Многие библиотеки и интерфейсы были созданы для приема и возврата объектов String . В настоящее время такие библиотеки, как правило, должны быть построены, чтобы ожидать CharSequence . Но (а) String , похоже, все еще доминирует в пространстве разума, и (Б) могут возникнуть некоторые тонкие технические проблемы при смешивании различных реализаций CharSequence . С видением 20/20 задним числом мы можем видеть, что все эти струнные вещи могли бы быть лучше обработаны, но вот мы здесь.

В идеале Java должен был бы начинаться с интерфейса и / или суперкласса , который будет использоваться во многих местах, где мы сейчас используем String , точно так же, как мы используем интерфейсы Collection или List вместо реализаций ArrayList или LinkedList .

Интерфейс И Класс

Ключевое отличие от CharSequence заключается в том , что это интерфейс, а не реализация . Это означает, что вы не можете непосредственно создать экземпляр CharSequence . Вместо этого вы создаете экземпляр одного из классов, реализующих этот интерфейс.

Например, здесь мы имеем x , который выглядит как CharSequence , но под ним на самом деле находится объект StringBuilder .

Это становится менее очевидным при использовании строкового литерала. Имейте в виду, что когда вы видите исходный код только с кавычками вокруг символов, компилятор переводит его в строковый объект.

Есть некоторые тонкие различия между «cat» и new String(«cat») , как обсуждалось в этом другом вопросе, но они здесь неуместны.

диаграмма классов

Эта схема классов может помочь вам ориентироваться. Я отметил версию Java, в которой они, по-видимому, демонстрировали, как много изменений произошло через эти классы и интерфейсы.

текстовый блок

Кроме все большего количества эмодзи и других символов, которые приходят с последовательными версиями поддержки Unicode , в последние годы мало что изменилось в Java для работы с текстом. до Java 13.

Java 13 может предложить предварительный просмотр новой функции: текстовые блоки . Это сделало бы более удобным написание встроенных строк кода, таких как SQL. Увидеть JEP 355 .

CharSequence -это контракт (интерфейс), а String — реализация этого контракта.

Документация для CharSequence является:

A CharSequence-это читаемая последовательность значений char. Этот интерфейс обеспечивает равномерный доступ только для чтения ко многим различным типам символов последовательности. Значение char представляет символ в базовом коде Многоязычный самолет (BMP) или суррогат. Обозначения символов Unicode Представление для деталей.

кроме того факта, что String реализует CharSequence и эта строка является последовательностью символов.

В вашем коде происходит несколько вещей:

Это создает литерал String , «hello» , который является объектом String . Будучи String , который реализует CharSequence , он также является CharSequence . (вы можете прочитать этот пост о кодировании для интерфейса , например).

это немного сложнее. String литералы в Java хранятся в пуле (интернированы), поэтому «hello» в этой строке является тем же объектом (идентичностью), что и «hello» в первой строке. Поэтому эта строка присваивает только один и тот же литерал String str .

На этом этапе и obj , и str являются ссылками на String -литерал «hello» и, следовательно, являются equals , == , и они оба являются a String и a CharSequence .

Я предлагаю вам протестировать этот код, показав в действии то, что я только что написал:

Я знаю, что это своего рода очевидно, но CharSequence-это интерфейс, тогда как String-конкретный класс 🙂

java.lang.String является реализацией этого интерфейса.

Рассмотрим UTF-8. В UTF-8 кодовые точки Юникода строятся из одного или нескольких байтов. Класс, инкапсулирующий массив байтов UTF-8, может реализовать интерфейс CharSequence, но в большинстве случаев не является строкой. Конечно, вы не можете передать массив байтов UTF-8, где ожидается строка, но вы определенно можете передать класс-оболочку UTF-8, который реализует CharSequence, когда контракт ослаблен, чтобы разрешить CharSequence. В моем проекте я разрабатываю класс под названием CBTF8Field (Compressed Binary Transfer Format — Eight Bit), чтобы обеспечить сжатие данных для xml, и собираюсь использовать интерфейс CharSequence для реализации преобразований из байтовых массивов CBTF8 в символьные массивы (UTF-16) и байтовые массивы (UTF-8).

Причина, по которой я пришел сюда, заключалась в том, чтобы получить полное представление о контракте подпоследовательности.

A CharSequence-это читаемая последовательность символов. Этот интерфейс обеспечивает единообразный доступ только для чтения ко многим различным типам последовательностей символов.

Этот интерфейс затем используется String, CharBuffer и StringBuffer , чтобы сохранить согласованность для всех имен методов.

В charSequence у вас нет очень полезных методов, которые доступны для String. Если вы не хотите заглядывать в документацию, введите: об.. и ул.

и посмотрите, какие методы предлагает вам ваш компилятор. Для меня это основное отличие.

Похожие вопросы:

Возможный Дубликат : Как работает интерпретатор / компилятор Привет какова точная разница между компилятором и интерпретатором ?

В чем разница между CharSequence[] и String[] ?

Какова реальная разница между методом toString() в интерфейсе CharSequence и методом toString() в классе Object ? Я знаю, что класс String по умолчанию реализует класс CharSequence и расширяет класс.

Я читал такие статьи, как: в чем разница между API-Gateway и Пограничной службой? , но все еще не ясно, в чем заключается точная разница между обнаружением службы (скажем, Эврика) и шлюзом службы.

В моем сервлете я дал как out.print , так и out.write . но оба отпечатка находятся в браузере. Какова точная разница между этими двумя и когда использовать out.print и out.write ?

Какова точная разница между ToolBarPanel и ToolBarTray в WPF ?

В чем разница между строкой 8 (C++) и строкой в Java ?

Мы планируем разработать собственные кросс-платформенные мобильные приложения с использованием Xamarin, поэтому мы пытаемся оценить Xamarin.Mac и Xamarin.iOS. Какова точная разница между Xamarin.Mac.

Читать еще:  Java calendar set

1.I я путаюсь между этими двумя, имеют ли они разные функции, если да, то как ? StringBuffer(CharSequence chars) и StringBuffer(String str) 2. В чем принципиальная разница между строкой и.

Какова точная разница между моделью и алгоритмом? Возьмем в качестве примера логистическую регрессию . Является ли логистическая регрессия моделью или алгоритмом и почему?

CharSequence против строки в Java?

программирование в Android, большинство текстовых значений ожидается в CharSequence .

почему это? В чем преимущество, и каковы основные последствия использования CharSequence над String ?

каковы основные различия и какие проблемы ожидаются при их использовании и преобразовании из одного в другой?

9 ответов

строки являются CharSequences, Так что вы можете просто использовать строки и не беспокоиться. Android просто пытается быть полезным, позволяя вам также указывать другие объекты CharSequence, такие как StringBuffers.

эта диаграмма классов может помочь вам увидеть общую картину строковых типов в Java 7/8. Я не уверен, что все они присутствуют в Android, но общий контекст все еще может оказаться полезным для вас.

кроме того, обратите внимание на комментарии по принято отвечать. The CharSequence интерфейс был модифицирован на существующие структуры классов, поэтому есть некоторые важные тонкости ( equals() & hashCode() ). Обратите внимание на различные версии Java (1, 2, 4 & 5) с метками на классы / интерфейсы-довольно много оттока на протяжении многих лет. В идеале CharSequence было бы с самого начала, но такова жизнь.

Я считаю, что лучше всего использовать CharSequence. Причина в том, что String реализует CharSequence, поэтому вы можете передать строку в CharSequence, однако вы не можете передать CharSequence в строку, поскольку CharSequence не реализует String. Кроме того, в Android EditText.getText() метод возвращает редактируемый, который также реализует CharSequence и может быть легко передан в один, а не в строку. CharSequence обрабатывает все!

в целом использование интерфейса позволяет варьировать реализацию с минимальным сопутствующим ущербом. Хотя java.ленг.Строка очень популярна возможно, что в определенных контекстах может потребоваться использовать другую реализацию. Создавая API вокруг CharSequences, а не строк, код дает возможность сделать это.

Это почти наверняка из соображений производительности. Например, представьте себе парсер, который проходит через 500k ByteBuffer, содержащий строки.

существует 3 подхода к возвращению содержимого строки:

создайте строку[] во время синтаксического анализа, по одному символу за раз. Это займет заметное количество времени. Мы можем использовать == вместо .равно для сравнения кэшированных ссылок.

создайте int[] с смещениями во время синтаксического анализа, затем динамически строить строку, когда get() происходит. Каждая строка будет новым объектом, поэтому нет кэширования возвращаемых значений и использования ==

построить CharSequence[] во время разбора. Поскольку новые данные не сохраняются (кроме смещений в байтовый буфер), синтаксический анализ намного ниже, чем #1. В get time нам не нужно создавать строку, поэтому производительность get равна #1 (намного лучше, чем #2), так как мы возвращаем только ссылку на существующий объект.

In в дополнение к преимуществам обработки, которые вы получаете с помощью CharSequence, вы также уменьшаете объем памяти, не дублируя данные. Например, если у вас есть буфер, содержащий 3 абзаца текста, и вы хотите вернуть все 3 или один абзац, вам нужно 4 строки, чтобы представить это. При использовании CharSequence требуется только 1 буфер с данными и 4 экземпляра реализации CharSequence, отслеживающей начало и длину.

CharSequence VS String в Java?

350 e-satis [2009-06-26 16:43:00]

Программирование на Android, большинство текстовых значений ожидается в CharSequence .

Почему? Какая польза и каковы основные последствия использования CharSequence над String?

В чем главные отличия и какие проблемы ожидаются при их использовании и переходе от одного к другому?

java string charsequence

9 ответов

297 Решение Zarkonnen [2009-06-26 16:45:00]

Строки — это CharSequences, поэтому вы можете просто использовать Strings и не беспокоиться. Android просто пытается быть полезным, позволяя вам также указывать другие объекты CharSequence, такие как StringBuffers.

32 Sham [2010-10-27 05:42:00]

Я считаю, что лучше использовать CharSequence. Причина в том, что String реализует CharSequence, поэтому вы можете передать String в CharSequence, ОЧЕНЬ, вы не можете передать CharSequence в String, поскольку CharSequence не реализует String. ТАКЖЕ, в Android метод EditText.getText() возвращает редактируемый, который также реализует CharSequence и может быть легко передан в один, а не просто в String. CharSequence обрабатывает все!

Эта диаграмма классов может помочь вам увидеть большую картину типов строк в Java 7/8. Я не уверен, что все они присутствуют в Android, но общий контекст может оказаться полезным для вас.

Также обратите внимание на комментарии, сделанные в принятом ответе. Интерфейс CharSequence был модифицирован на существующие структуры классов, поэтому есть некоторые важные тонкости ( equals() и hashCode() ). Обратите внимание на различные версии Java (1, 2, 4 и 5), помеченные на классах/интерфейсах — довольно много отбросов на протяжении многих лет. Идеально CharSequence было бы на месте с самого начала, но такова жизнь.

19 Itay Maman [2009-06-26 16:45:00]

В общем случае использование интерфейса позволяет варьировать реализацию с минимальным побочным ущербом. Хотя java.lang.String очень популярны, возможно, что в некоторых контекстах вы захотите использовать другую реализацию. Создавая API вокруг CharSequences, а не Strings, код дает возможность сделать это.

Это почти наверняка соображения производительности. Например, представьте себе синтаксический анализатор, который проходит через строки, содержащие строки 500 бит ByteBuffer.

Существует три подхода к возврату содержимого строки:

Построить строку [] во время разбора, по одному символу за раз. Это займет заметное количество времени. Мы можем использовать == вместо .equals для сравнения кешированных ссылок.

Создайте int [] со смещениями во время разбора, а затем динамически создайте String, когда произойдет get(). Каждая строка будет новым объектом, поэтому никакие кеширования не возвращают значения и используют ==

Создайте CharSequence [] во время разбора. Поскольку новые данные не хранятся (кроме смещений в байтовый буфер), синтаксический анализ намного ниже, чем # 1. При достижении времени нам не нужно создавать String, поэтому получить производительность равна # 1 (намного лучше, чем # 2), так как мы возвращаем только ссылку на существующий объект.

В дополнение к преимуществам обработки, которые вы получаете с помощью CharSequence, вы также уменьшаете объем памяти, не дублируя данные. Например, если у вас есть буфер, содержащий 3 абзаца текста, и вы хотите вернуть либо все 3, либо один абзац, вам нужно 4 строки для представления этого. Используя CharSequence, вам нужен только 1 буфер с данными и 4 экземпляра реализации CharSequence, которые отслеживают начало и длину.

Читать еще:  Console log javascript

6 Crypth [2014-11-19 12:36:00]

Проблема, которая возникает в практическом коде Android, заключается в том, что сравнение их с CharSequence.equals действительно, но не обязательно работает по назначению.

Сравнение должно выполняться

0 Suragch [2017-11-10 14:45:00]

CharSequence

A CharSequence — это интерфейс, а не действительный класс. Интерфейс — это всего лишь набор правил (методов), которые должен содержать класс, если он реализует интерфейс. В Android a CharSequence является зонтиком для различных типов текстовых строк. Вот некоторые из общих:

  • String (неизменный текст без пробелов стиля)
  • StringBuilder (изменяемый текст без пробелов в стиле)
  • SpannableString (неизменный текст с интервалами стилизации)
  • SpannableStringBuilder (изменяемый текст с интервалами стилизации)

(Здесь вы можете подробнее узнать о различиях между этими здесь.)

Если у вас есть объект CharSequence , то он фактически является объектом одного из классов, реализующих CharSequence . Например:

Преимущество наличия общего типа зонтика типа CharSequence заключается в том, что вы можете обрабатывать несколько типов с помощью одного метода. Например, если у меня есть метод, который принимает CharSequence в качестве параметра, я мог бы передать String или SpannableStringBuilder , и он будет обрабатывать любой из них.

Строка

Можно сказать, что String — это всего лишь один вид CharSequence . Однако, в отличие от CharSequence , это фактический класс, поэтому вы можете создавать из него объекты. Поэтому вы можете сделать это:

но вы не можете этого сделать:

Так как CharSequence — это просто список правил, которым соответствует String , вы можете сделать это:

Это означает, что в любое время, когда метод запрашивает CharSequence , он должен дать ему String .

Однако противоположное утверждение неверно. Если метод принимает параметр String , вы не можете передать ему то, что обычно известно как CharSequence , потому что на самом деле это может быть SpannableString или какой-то другой CharSequence .

CharSequence — это интерфейс и String реализует его. Вы можете создать экземпляр String , но вы не можете сделать это для CharSequence , так как это интерфейс. Вы можете найти другие реализации в CharSequence на официальном веб-сайте Java.

CharSequence — это читаемая последовательность значений char, которая реализует String. он имеет 4 метода

  • charAt (int index)
  • длина()
  • subSequence (int start, int end)
  • ToString()

Пожалуйста, обратитесь к документации Документация CharSequence

Java 8 строки

В Java строки являются объектами класса java.lang.String, который является обычным классом но со специальной поддержкой компилятором. Этот класс представляет строку в виде набора символов UTF-16, где дополнительные символы представляются в виде суррогатных пар, другими словами один символ Юникода может состоять из двух char code unit. Индекс в строке адресует char code unit, а на символ. Дополнительные символы используют две позиции в строке.

char code unit — 16-битный символ char .

char code point — символ юникода. Может состоять из двух char -ов.

Такая путаница из char code unit и char code point произошла из-за того, что первоначально стандарт Юникода 1991 года предполагал 16-битные символы фиксированной длины, однако в последствии он был расширен в 1996 году для возможности представления символов, которым необходимо больше 16 бит.

Все строковые литералы в Java являются объектами класса String .

Примеры создания строк:

Для строковых литералов используются двойный кавычки, а для примитивного типа char — одинарные.

У класса String довольно много конструкторов. Можно, например, создать строку на основе массива байт:

В этих примерах «ISO-8859-1» — это имя кодировки.

Каждая реализация Java поддерживает следующие виды кодировок:

Дополнительно могут поддерживаться другие кодировки, например для Windows обязательно будет поддержка кодировки windows-1251.

Когда компилятор видит строковый литерал, например «Hello world!» , в коде, он создаёт объект класса java . lang . String .

Так как строковые литеры являются объектами, то у них можно вызывать методы:

В Java нет перегрузки операций, но класс строки имеет особую поддержку со стороны компилятора — строк можно соединять с помощью операции «+» (при этом используется java.lang.StringBuilder или java . lang . StringBuffer ):

Конкатенации строковых литералов вида » goes» + » to school.» компилятор вычисляет на этапе компиляции, поэтому во время выполнения не будет происходить лишних операций. Можно с помощью «+» разделять строковые константы на несколько строк, компилятор уберёт лишние операции сам и превратит всё в одну строковую литералу:

Каждый объект в Java может участвовать в операции конкатенации (соединения) строк, в этом случае используется метод toString ( ) , (если ссылка на объект равна null, то используется строка «null» ):

Выведет в консоль:

Класс String НЕ имеет специальной поддержки для == , поэтому сравнивать строки нужно либо через метод equals ( ) , либо equalsIgnoreCase ( ) , либо compareTo ( ) , либо compareToIgnoreCase ( ) .

В Java используется пул строковых литералов. Одинаковые строковые литералы всегда ссылаются на один и тот же экземпляр класса String :

Этот код выведет:

  1. Одинаковые строковые литералы всегда ссылаются на один и тот же экземпляр класса String .
  2. Экземпляры классы String , вычисленные во время выполнения, создаются заново, автоматически в пуле не участвуют и потому различны.
  3. Строковые литералы в константных выражениях вычисляются на этапе компиляции и затем расцениваются как обычные литералы.
  4. С помощью метода intern() можно добавить строку в пул либо получить ссылку на такую строку из пула.

Многие методы строки принимают в качестве параметра или возвращают в качестве результата индекс. Индексация начинается с нуля. Первый char (имеется в виду char code unit, а не символ, разумеется) в строке имеет индекс 0, а последний имеет индекс length() — 1. Если переданный в параметр индекс выходит за пределы строки, то методы генерируют исключение java . lang . IndexOutOfBoundsException .

Некоторые методы принимают в качестве параметров начальный индекс и конечный индекс. В этом случае начальный индекс включается в отрезок, а конечный индекс исключается, так что длина отрезка получается равной конечный индекс минус начальный индекс, как на картинке.

Подобная индексация является стандартом в Java. Всегда когда указывается отрезок в массиве, строке, списке или ещё-где-то, начальный индекс включается в отрезок, а конечный исключается.

Ссылка на основную публикацию
Adblock
detector