Immutable objects can have non-private fields, as long as they are final.

I am a proponent of immutable value objects with public fields and without the boilerplate of setters and getters, like e.g.:
public class ValueObject {
    public final int x;

    public ValueObject(final int x) {
        this.x = x;
    }
}