Что происходит с этими объединениями в Java? - PullRequest
1 голос
/ 06 января 2010
byte[] b1 = null;
byte[] b2 = null;

System.out.println(b1 + b2);    // 1
System.out.println("" + b1 + b2); // 2

если я раскомментирую 1, это приводит к ошибке компиляции.
если я раскомментирую 2, то это печатает nullnull;

так что здесь происходит?

Ответы [ 5 ]

7 голосов
/ 06 января 2010

Строка 2 выполняет неявное приведение к String обоих массивов и объединяет их, что допустимо. В первой строке вы пытаетесь применить оператор add к двум байтовым массивам, что не поддерживается.

1 голос
/ 06 января 2010
  1. Вы используете оператор + для байтовых массивов, подобных этому. Так что ошибка компиляции.
  2. Исходные двойные кавычки преобразовывают b1 в b2 в строку. Эквивалент b1.toString () + b2.toString (). Так что nullnull
0 голосов
/ 06 января 2010

В 1 вы пытаетесь использовать оператор + для двух массивов, который не определен в Java.

В 2 вы объединяете строку "" со строковым представлением ваших нулевых массивов. Это работает только потому, что + разрешает слева направо, поэтому он интерпретируется как конкатенация строк. Переместите «» в конец строки, и это также даст вам ошибки компиляции.

0 голосов
/ 06 января 2010
  1. Операция добавления (+) не определена для байтовых массивов. Все просто.

  2. Операция «special» + для Strings очень старается преобразовать все типы данных в Strings, чтобы эта операция работала. В этом конкретном случае преобразует нулевую ссылку в строку «ноль». Странно, но это предотвращает некоторые ошибки.

Причина, по которой (2) не применима к (1), заключается в том, что в (1) не было никаких строк, в то время как наличие «» в (2) заставило выражение оцениваться как строки.

0 голосов
/ 06 января 2010

1 пытается добавить два массива, оба из которых равны нулю. Это не работает.

2 добавляет строковое значение массива (null для нулевых значений, в противном случае результат toString ()) в пустую строку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...