По сути, массив хранит ссылки на объекты и всё. Разве что стоит упомянуть о том, что ссылки эти лежат в памяти последовательно, одним непрерывным куском, массивом.
Пример того, когда они могут лежать не последовательно - связный список, LinkedList в Java.
sandbox.Box@14eac69 это то, что отдал метод toString() по умолчанию. Full qualified name + @ + адрес, по которому лежит конкретный объект. Можно у класса Box переопределить метод toString(), чтобы он выдавал нечто осмысленное.
например
class Box {
private int x, y;
@Override
public String toString(){
return Box.class.getName() + "[x: " + x + ", y: " + y + "]";
}
}
Принято считать, что toString() выдает human-readable строку, то есть его не стоит использовать, например, для сохранения внутреннего состояния объекта или завязывать на нём какую-то логику. Он в любой момент может быть изменён и это ничего не должно сломать.