Разница между строками в С++ и Java
В C++
я могу сделать что-то вроде этого...
String s = "abc";
char c = s[i]; // works fine...
Но в Java
, если я попытаюсь сделать то же самое, он выдает ошибку. Почему?.
В Java
, для достижения вышеизложенного, я должен сделать:
s.toCharArray();
Как реализация строк в C++
отличается от реализации в Java?
Ответы
Ответ 1
В java, для достижения вышеизложенного, я должен сделать: s.toCharArray();
Не совсем. Вместо этого вы можете использовать charAt
:
char c = s.charAt(i);
В принципе, С++ допускает пользовательские операторы - Java - нет. Таким образом, класс String
не выставляет никакого оператора "индексации"; который существует только для массивов, а String
не является массивом. (Обычно он реализуется с использованием массива, но это другое дело.)
ИЗМЕНИТЬ: Как отмечено в комментариях, оператор +
имеет специальную форму для строк - прямо в спецификации языка. То же самое можно было бы сделать для []
, но это не так - и, как это не указано в спецификации языка, а Java не поддерживает перегруженные операторы, это невозможно выполнить в библиотечном коде. (Например, вы не можете дать пользовательское поведение +
для любого другого класса.)
Ответ 2
Отличие состоит в том, что С++ имеет перегрузку оператора и использует его для доступа к содержимому строки.
Они оба сохраняют строковые символы таким образом, что вы не можете их изменить.
Ответ 3
См. метод Строка # charAt
Возвращает значение char по указанному индексу. Индекс колеблется от 0 до длины() - 1. Первое значение char последовательности имеет индекс 0, следующий в индексе 1 и т.д., Как для индексации массива.
Если значение char, указанное индексом, является суррогатом, возвращается суррогатное значение.
public char charAt(int index)
Ответ 4
в С++ строки уже рассматриваются как массив символов,
но в java String - встроенный класс.
он отличается от массива символов.
Ответ 5
Причина, по которой можно написать
string s = "abc";
char c = s[i];
в С++ заключается в том, что класс string
перегрузил оператор индексирования (например, оператор []), который позволяет программистам обращаться к символам объекта string
так же, как к ним обращаться к элементу массива, несмотря на то, что что объект string
не является массивом.
Java, с другой стороны, не допускает перегрузки оператора любого типа (единственным исключением является оператор +
, который перегружен для строк), и, следовательно, оператор индексирования не может и не может быть перегружен для string
объектов. В Java, чтобы получить доступ к символу строки, вам необходимо использовать методы элемента доступа, например charAt
. Вы также можете вызвать метод toCharArray
класса string
, который возвращает вам массив символов строкового объекта, и вы можете использовать оператор индексирования с этим возвращаемым значением:
char c = s.toCharArray()[i];
Ответ 6
В С++ строка обычно представляет собой массив символов (или указатель на), завершаемый символом NULL (\ 0). Вы можете обрабатывать строку, индексируя также, как вы обрабатывали любой массив.
Но в Java строки не являются массивами. Строки Java - это объекты типа java.lang.String
, поэтому вы не можете обрабатывать их путем индексирования.