#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:
Обратите внимание, что:
String
(или любой объект) имеет значение по умолчанию —null
char
имеет значение по умолчанию —'u0000'
, которое, в свою очередь, представляет нулевой символ / терминатор, то есть непечатаемый управляющий символ.