synchronized里置状态为什么不能锁住

synchronized里放状态为什么不能锁住。
public class MyObj {
private Integer sum = 10;

public  void  add(int num) {

synchronized(sum){
sum = sum + num;
System.out.println(Thread.currentThread().getName() + "\tsum=" + sum);
}

}
}
我知道synchronized锁this会锁住this对象,保证线程安全;那么为什么锁sum就不行呢,锁住sum对象,按理说不也应该能保证线程安全么。
------解决思路----------------------
可以看Integer的部分源码

private final int value;

Integer里面唯一属性value是final的,也就是初始化完之后是不允许改变的
换句话说,若改变了也就会生成新的对象了
所以值改变了,就跟之前不是同一对象了
所以锁就失去作用了
类似 基本类型的封装类 以及String都是如此