Решил объявив inner class как статический. правильно я понимаю, что в этом этом случае все четыре переменные: public static Solution[] getTwoSolutions() { Solution[] solutions = new Solution[2]; solutions[0] = new Solution(); solutions[0].innerClasses[0] = new InnerClass(); solutions[0].innerClasses[1] = new InnerClass(); solutions[1] = new Solution(); solutions[1].innerClasses[0] = new InnerClass(); solutions[1].innerClasses[1] = new InnerClass(); return solutions; } ссылаются на одну и ту же область памяти, на статический InnerClass? Вот такой эксперимент, показывает, что я неправильно понимаю :( public static void main(String[] args) { Solution[] solutions = getTwoSolutions(); solutions[0].innerClasses[0].setI(1); System.out.println(solutions[0].innerClasses[1].getI()); } выводится 0...