Символ * в C, как вы заметили, указывает на начало массива символов (именно так C управляет строками).
В C размер символа равен одному байту, а указатели всегда указывают на начало байта.Ваша строка C представляет собой массив символов, поэтому добавление 1 к указателю смещает начало вашей строки вправо на один символ.
Это означает, что код C:
char *a;
// Set the String here
a = a + 1;
переводится вJava для чего-то вроде:
String a;
// Set the String here
a = a.substring(1);
или если вы используете массив символов:
char[] a;
// Set the array contents here
char[] copyTo = new char[a.length];
System.arraycopy(a, 1, copyTo, 0, a.length);
a = copyTo;
Java будет более осторожно защищать вас, чем будет C.Например, если у вас есть строка нулевой длины, код C может потенциально привести к segfault (сбой приложения) или дать вам бессмысленную строку, заполненную ненужной памятью (а затем, в конечном итоге, сбой приложения), тогда как код Java будетгенерировать исключение (обычно это IndexOutOfBoundsException), которое, как мы надеемся, вы можете обработать аккуратно.
Помните, что String в Java неизменен.Вы не можете изменить их, вы можете только создавать новые строки.К счастью, String имеет несколько встроенных функций, которые позволяют вам выполнять множество стандартных действий, например, заменять часть String другой и возвращать результат.Массив символов является изменяемым, и вы можете изменять символы внутри него, но вы потеряете много приятных преимуществ, которые вы получите от использования соответствующего класса String.