Фактический ответ
SonarLint предлагает вам вместо вызова toString()
для экземпляра массива, а лучше использовать метод утилиты Arrays
.
Он предлагает вам изменить код на что-то вроде следующего:
byte[] lblobPic;
lblobPic = r.get(ALUNO.PFOTO);
if (lblobPic != null) {
String argStr = Arrays.toString(lblobPic);
peopleDto.setUrlPic(argStr);
}
Причина ответа
a) Удобочитаемость для людей
Рассмотрим следующий фрагмент кода:
String[] strings = { "foo", "bar", "bla", "boo" };
System.out.println(strings.toString());
// prints: [Ljava.lang.String;@7852e922
System.out.println(Arrays.toString(strings));
// prints: [foo, bar, bla, boo]
Правило Линтера предполагает, что разработчик действительно хочет читаемый вывод массива (с учетом его элементов), и предлагает вам использовать Arrays.toString()
метод, который делает это (как описано в документации ).
Аналогично, Arrays.hashCode()
рассматривает элементы данного массива в хешировании (как описано в документация ).
b) Детерминизм
(согласно предложению @ andi-turner)
Методы утилиты Arrays
, учитывают только элементы при построениистрока / вычисление хэша.Вы всегда будете иметь одну и ту же строку / хэш, если будете использовать входной массив, состоящий из одинаковых строк (или значений другого типа) в той же последовательности.yourArray.toHashcode()
или yourArray.toString()
не дает вам этого.