Array.toString возвращает адрес памяти, а не фактические значения [duplicate]

Просто следите за тем, как я это сделал и почему:

  1. Я больше не наследую класс Rule из MonoBehaviour, чтобы избежать отслеживания создания и удаления объектов gameObjects, которая оказалась болью.
  2. Поскольку метод Invoke не существует в родовых классах, я заменил его отражением, как описано здесь здесь

0
задан deHaar 15 January 2019 в 09:47
поделиться

2 ответа

Вы должны переопределить метод toString() в вашем классе Box:

class Box {
     private final int height;

     public Box(int h){
         height = h;
     }

     @Override
     public String toString(){
         return Integer.toString(height);
     }
}

Поскольку реализация по умолчанию наследуется классом Object (базовый класс для каждого объекта в Java) , который выглядит следующим образом:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Обратите внимание, что это не печать адреса памяти, а шестнадцатеричное представление хеш-кода, возвращаемого hashcode() -методом

0
ответ дан Lino 15 January 2019 в 09:47
поделиться

Arrays.toString зацикливает каждый элемент в массиве, зацикливает и вызывает String.valueOf (element) для каждого элемента и добавляет их в результат StringBuilder.

String.valueOf (Box box) фактически вызывает box.toString (), поскольку класс Box не переопределяет метод toString (), тогда будет вызван родительский класс Object.toString () и className @ HexString (hashCode ( )) будут возвращены.

Вы можете либо переопределить метод toString () в Box, чтобы вернуть строковое значение высоты (будет напечатано [5, 3, 2]), либо высоту цикла и печати для каждого Box в массиве.

0
ответ дан Sandy W 15 January 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: