Массив символов не имеет null, но строковый массив имеет

#java #arrays #multidimensional-array

#java #массивы #многомерный массив

Вопрос:

Я пытаюсь напечатать 2D-массив, образованный прямоугольником, чтобы 4 на 4 было что-то вроде этого:

 * * * *
*     *
*     *
* * * *
  

Я понимаю, что могу распечатать это с помощью этого кода:

 int rows = 4;
int columns = 4;
char[][] rectangle = new char[rows][columns];
// fill array
for (int i = 0; i < rows; i  ) {
    for (int j = 0; j < columns; j  ) {
        if (i == 0 || j == 0 || i == rows - 1 || j == columns - 1) {
            rectangle[i][j] = '*';
        }
        System.out.print(rectangle[i][j]);
    }
    System.out.println();
}
  

Но когда я меняю тип массива с char на String с помощью приведенного ниже кода:

 int rows = 4;
int columns = 4;
String[][] rectangle = new String[rows][columns];
// fill array
for (int i = 0; i < rows; i  ) {
    for (int j = 0; j < columns; j  ) {
        if (i == 0 || j == 0 || i == rows - 1 || j == columns - 1) {
            rectangle[i][j] = "* ";
        }
        System.out.print(rectangle[i][j]);
    }
    System.out.println();
}
  

Он возвращает это:

 * * * * 
* nullnull* 
* nullnull* 
* * * * 
  

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

Ответ №1:

ну, это просто потому String , что это объект, поэтому он может иметь null значение, а null — значение по умолчанию для строки. С другой стороны char , это примитивный тип, он просто не может содержать null значение. Значение по умолчанию для символа равно 'u0000'

Комментарии:

1. Так означает ли ‘ u0000’ пустой или » «?

2. это пустой символ, на самом деле это fileformat.info/info/unicode/char/0000/index.htm

3. Нулевой код ASCII называется нулевым и не имеет визуального представления. То, что вы получили пробелы, было удачей, так как это зависит от того, где оно отображается. Вы также можете получить вопросительные знаки, вопросительные знаки в маленьких квадратиках, маленькие квадратики, содержащие крошечный текст «NULL», маленькие квадратики, содержащие шестнадцатеричные цифры 0000 и т. Д. 🙂

4. Кроме того, какой запасной вариант используется приложением в случае, если набор символов не имеет символа для NULL 😊

Ответ №2:

Посмотрите на значения по умолчанию для типов данных Java core:

введите описание изображения здесь

Обратите внимание, что: