I tried to make the instance variable in the following class immutable by making it final..But it seems that I can modify its data.. Is only the reference immutable? (ie I cannot assign another instance of Y to that variable?)
public class StateModification {
    private final Y immutable ;
    public StateModification() {
        super();
        this.immutable = new Y(100);
    }
    public void setImmutableData(int x){
        this.immutable.setYnum(x);
    }
    public int getImmutableData(){
        return this.immutable.getYnum();
    }
    public static void main(String[] args) {
        StateModification sm = new StateModification();
        System.out.println("immutable="+sm.getImmutableData());
        sm.setImmutableData(222);
        System.out.println("immutable="+sm.getImmutableData());
    }
}
class Y{
    private int ynum;
    public Y(int ynum) {
        super();
        this.ynum = ynum;
    }
    public int getYnum() {
        return ynum;
    }
    public void setYnum(int ynum) {
        this.ynum = ynum;
    }
}
o/p
immutable=100
immutable=222