(1)首先static 称为类变量,它属于这个类,而不属于这个类的实例对象(但是可以通过实例对象去访问)当类连接的时候就为其分配空间并初始化默认值,空间分配在堆中。 
(2)Integer是int的包装类型,其中采用了缓存机制,在缓存中-128~127这些数是在堆中本来就存在的,所以Integer a = new Integer(1);  Integer b = new Integer(1); a与b其实是一个对象。如果你把数字改为128的话那就是两个对象了
(2)Map是一个接口, HashMap是map的一个实现类而已,在一个可变大小的容器,内存空间分配在堆中,map中存放的数据其实不是String的值,而是存放的String的引用(你可以理解为是String字符串的地址),以为String的创建是非常消耗资源的,所以在JVM中不希望你去反复的创建字符串对象,而是它维持了一个字符串池(在常量区),当你以String s=“abc”创建字符串的时候它会先去池中找,如果找到返回“abc”的引用,如果找不到那么才会去创建对象。 当你以String s = new(“abc”)的形式创建字符串时,其实是创建了两个对象,首先在堆中分配空间,其次把这个对象扔到字符串池中。