@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        ImmutableObject that = (ImmutableObject) o;

        if (anInt != that.anInt) {
            System.out.println("\tequals(): anInt != that.anInt");
            return false;
        }

        if (stringBuffers != null ? !stringBuffers.toString().equals(that.stringBuffers.toString()) : that.stringBuffers != null) {
//            System.out.println("\tequals(): stringBuffers != null ? !stringBuffers.equals(that.stringBuffers) : that.stringBuffers != null");
//            System.out.println("\tequals(): stringBuffers = " + stringBuffers);
//            System.out.println("\tequals(): that.stringBuffers = " + that.stringBuffers);
//            System.out.println("\tequals(): stringBuffers.equals(that.stringBuffers) = " + stringBuffers.equals(that.stringBuffers));
            return false;
        }

        if (strings != null ? !strings.equals(that.strings) : that.strings != null) {
            System.out.println("\tequals(): strings != null ? !strings.equals(that.strings) : that.strings != null");
            return false;
        }

        return true;
    }