Переменные string и char в Java
В этом уроке мы рассмотрим на примерах строковые переменные string и char в Java. Разберем разницу между ними и закрепим новые знания в новом созданном проекте.
Помимо хранения числовых значений, переменные могут содержать текст. Вы можете хранить один или множество символов. Для хранения только одного символа используется переменная char . Чтоб хранить более одного символа, нужен тип переменной string . Переменную string в Java используют чаще, чем char.
Для этого начнем новый проект, нажав File > New Project в строке меню в верхней части NetBeans. Когда появится диалоговое окно New Project, убедитесь, что выбраны Java with Ant и Java Application:
Нажмите Next и введите StringVars в качестве имени проекта. Убедитесь, что в поле Create Main Class стоит галочка. Затем там же удалите после после точки StringVars и введите вместо этого StringVariables, как показано на следующем рисунке:
Таким образом, имя проекта — StringVars, а имя класса — StringVariables. Нажмите кнопку Finish, и ваше окно с кодом будет выглядеть так (все комментарии по умолчанию удалены). Обратите внимание, что имя пакета — все строчные буквы (stringvars), но именем проекта было StringVars.
Чтобы установить в Java переменную string, вы вводите слово String, а затем имя для вашей переменной. Обратите внимание, что в Java переменная String пишется с заглавной «S». И естественно точка с запятой завершает строку:
Присвойте значение новой строковой переменной, введя знак равенства. После знака равенства текст, который вы хотите сохранить, должен находится между двумя двойными кавычками:
Если хотите, вы можете записать все это в одной строке:
Установите вторую строковую переменную для хранения фамилии:
Чтобы напечатать оба имени, добавьте следующий println ():
System.out.println (first_name + » » + family_name);
В круглых скобках println мы имеем:
Мы говорим Java о том, что хотим распечатать все, что находится в переменной с именем first_name. Затем у нас есть символ плюс, за которым следует пробел. В двойных кавычках находится пробел. Java распознает это так, что мы хотим распечатать символ пробела. После пробела у нас есть еще один символ плюс, за которым следует переменная family_name.
Ваше окно с кодом должно выглядеть так:
Запустите свою программу, и вы должны увидеть это в окне вывода:
Разница между переменными string и char в Java
Если вы сохраните только один символ, тогда вам нужна переменная char (беззнаковое целое число, представляющее собой символ UTF-16 (может быть буквой или цифрой)). Чтобы сохранить символ, следует использовать одинарные кавычки вместо двойных. Вот наша программа, но на этот раз с переменной char:
Если вы попытаетесь заключить переменную char в двойные кавычки, NetBeans подчеркнет код красной волнистой линией , сообщая об ошибке «несовместимого типа».
В переменную String также можно заключить только один символ. Но тогда потребуются двойные кавычки:
String name = ‘В‘;
Существует еще много вариантов string, и позже вы их встретите. А пока давайте продолжим и научимся получать информацию от пользователя.
Difference between Character and String in C
Answer: A character is just a single character enclosed in single quotes. For example:
And a character string is a sequence of 0 or more characters enclosed in double quotes. Each string is terminated by a NULL byte. Therefore, string containing 0 characters is called an empty string. For example,
Further, size of a character can be evaluated using sizeof operator while of strings, strlen function does so. strlen function returns actual no. of characters in the string excluding NULL byte. Therefore, while declaring a character array to be a string, keep one byte extra for NULL terminator plus size, in bytes, for maximum no. of characters in the string. For example, for a string containing maximum 10 characters, we need to declare character array of size 11 bytes, as:
Notice that ‘msg’ is a 10 characters string while it’s declared and initialized to contain 11 characters. Last character is NULL byte to terminate the string ‘msg’. Let’s now take a simple program and observe its output.
Output of the above program as:
Notice that size of empty string is 0 bytes while of ‘msg’, which was declared to contain 11 characters, gives size as 10 bytes for string of 10 characters.
Sanfoundry Global Education & Learning Series – 1000 C Tutorials.
Почему string — это char*?

Я так понял, что std::string не имелся в виду.
То есть суть вопроса такова: почему строки передают как char* , хотя это тип указателя на один char .
Дело в том, что массивы в C нельзя передавать как параметр функции, указатель на массив нельзя сохранить.
В результате массив, например char[8] , принято передавать как указатель на его первый элемент: char* . Более того, при передаче массива в функцию он автоматически разлагается (decays) до указателя на первый элемент.
Остальные элементы получаются при помощи адресной арифметики: *(p+3) или p[3] , что одно и то же. Итак, указатель в коде C может указывать как на одну переменную, так и на целый массив (точнее, его начало).
Для массивов int или любого другого типа обычно вместе с указателем на первый элемент передают размер массива. Но строки C завершаются нулевым символом, поэтому здесь длина известна и так. Вот и получается, что char* используют вместо char[N] .
Edit: На самом деле, в C можно объявить указатель на массив:
int (*arr)[10] = malloc(sizeof(*arr) * 5);
Не помню, чтобы я видел такую конструкцию в реальном коде.
Разница между типами string и char [] в C ++
Я знаю немного C, и теперь я смотрю на С++. Я привык к массивам char для работы со строками C, но пока я смотрю на код С++, я вижу, что есть примеры, использующие как строковый тип, так и char массивы:
Я предполагаю, что это широко заданный и ответивший (очевидный?) вопрос, но было бы неплохо, если бы кто-нибудь мог сказать мне, какая именно разница между этими двумя способами для работы со строками на С++ (производительность, интеграция API, способ каждый лучше. ).
7 ответов
A char массив — это просто массив массивов символов:
- Если выделено в стеке (например, в вашем примере), оно всегда будет занимать, например. 256 байтов независимо от того, как долго он содержит текст
- Если выделено в куче (используя malloc() или новый char []), вы ответственны за освобождение памяти после этого, и вы всегда будете иметь накладные расходы на распределение кучи.
- Если вы скопируете в массив массив из более чем 256 символов, это может привести к сбою, созданию уродливых сообщений об утверждении или вызвать необъяснимое (неправильное) поведение в другом месте вашей программы.
- Чтобы определить длину текста, массив должен быть отсканирован, символ по символу, для символа \0.
Строка — это класс, который содержит массив char, но автоматически управляет им для вас. Большинство строковых реализаций имеют встроенный массив из 16 символов (поэтому короткие строки не фрагментируют кучу) и используют кучу для более длинных строк.
Вы можете получить доступ к массиву char следующим образом:
Строки С++ могут содержать вложенные символы \0, знать их длину без учета, быстрее, чем массивы с массивом char для коротких текстов и защищают вас от переполнения буфера. Кроме того, они более читабельны и удобны в использовании.
Однако строки С++ не подходят (очень) для использования через границы DLL, потому что для этого потребуется любой пользователь такой DLL-функции, чтобы убедиться, что он использует ту же самую реализацию компилятора и С++, чтобы он не рискнул своим строковым классом по-разному.
Как правило, класс string также выводит свою кучную память в кучу вызова, поэтому он сможет снова освободить память, если вы используете общую (.dll или .so) версию среды выполнения.
Вкратце: используйте строки С++ во всех своих внутренних функциях и методах. Если вы когда-либо писали .dll или .so, используйте строки C в своих общедоступных функциях (dll/so-protected).