关于HashMap的put问题

Map map = new HashMap();
map.put("1",new Object());
上面是把new出来的一个对象作为“值”放入了map中。

可是下面的就不理解了:
Object a = new Object();
map.put("1",a);
想问下放入map的到底是new出来的对象的引用(即:a),还是这个对象本身呢?
求解!多谢!

1.hashMap存储的都是地址:
[code="java"]

public class TShashMap {
public static void main(String[] args) {
Map ts = new HashMap();
TSA tsa = new TSA();
tsa.setAge(15);
tsa.setName("hashMap");
ts.put(1, tsa);
System.out.println((TSA)ts.get(1));
tsa.setAge(18);

    System.out.println((TSA)ts.get(1));
}

}
class TSA {
private String name;
private int age;

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
public String toString() {
    return "name:" + name + " age:" + age;
}

}
[/code]
楼主跑下上面的i.e就明白了
2.你给的i.e,内存溢出是由于java虚拟机本身的原因,和内存没有关系。
只要存入hashmap中的元素在1<<30之内,就OK

对象的引用地址

我想是因为你运行程序的jvm内存小于你使用的内存,所以出现内存溢出。你应该区分一下值传递和引用传递,值传递是拷贝一个副本到方法里,你方法里面怎么改不会影响到外边,引用传递传递的时对象的地址,调用方法外和内操纵都是同一份地址,所以这个对象改变了,将会影响到外面(因为你外面那个变量指向了这个对象)。

[quote]如果只是存放的对象的内存地址的话,不应该只能存放7个地址吧&[/quote]
不管是不是放到map里面,你这个new出来的对象总要放在内存里面吧,所以内存肯定会溢出啊。。。 跟你put没关系

HashMap的都对象引用的

放的是对象的地址,就是所谓的引用类型。C里面叫指针。