import java.util.*;class Bean
{
int c = 0;
void set (int x) {
c=x;
}
int get() {
return c;
}
}public class Test
{
public static void main (String[] args) {
Bean cc = new Bean();
HashMap map = new HashMap();
cc.set(1);
map.put("a",cc); //这里的“值”,为什么可以用cc(对象),cc中有值吗?
cc.set(2);
map.put("b",cc);
cc.set(3);
map.put("c",cc); System.out.println(((Bean)map.get("a")).get());//为什么要强制转换为Bean型,输出为什么是 3 ?
}
}
输出结果为: 3 //各位高手帮小弟解答一下上面的问题,谢谢啦!!
{
int c = 0;
void set (int x) {
c=x;
}
int get() {
return c;
}
}public class Test
{
public static void main (String[] args) {
Bean cc = new Bean();
HashMap map = new HashMap();
cc.set(1);
map.put("a",cc); //这里的“值”,为什么可以用cc(对象),cc中有值吗?
cc.set(2);
map.put("b",cc);
cc.set(3);
map.put("c",cc); System.out.println(((Bean)map.get("a")).get());//为什么要强制转换为Bean型,输出为什么是 3 ?
}
}
输出结果为: 3 //各位高手帮小弟解答一下上面的问题,谢谢啦!!
cc.set(2);
map.put("b",cc);
cc.set(3);
map.put("c",cc);这三次存放到map中的都是同一个对象,也就是cc变量所引用的对象。
而并不是存入了cc的copy。
public static void main(String[] args) {
Bean cc = new Bean();
HashMap map = new HashMap();
cc.set(1);
map.put("a", cc); // 对象啊,什么值,Map的所谓的key-value 其实都必须是对象。
cc.set(2); // 你修改了 cc 对象的c值,
map.put("b", cc); // 你把 cc 再次存到了 b 的key 里面,记得,cc 只有一个,只不过有2个信封都存了他的地址
cc.set(3); // 再次修改了cc的 c值
map.put("c", cc); // 你又增加了一个信封,不过里面保存的依然是相同的地址 System.out.println(((Bean) map.get("a")).get());// Map 里面存的是对象,不是Bean, 所以拿出来时必须转换。 因为存的都是cc的地址,所以拿到的也只有cc了,所以cc的c值为最后一次赋值的 3
}
}如果你不希望强制转换,你可以这样声明
HashMap<String,Bean> map = new HashMap<String,Bean>();不过需要JDK 5.0指出
{
int c = 0;
void set (int x) {
c=x;
}
int get() {
return c;
}
} public class Test
{
public static void main (String[] args) {
Bean cc ;HashMap map = new HashMap();
cc=new Bean();
cc.set(1);
map.put("a",cc);
cc=new Bean();
cc.set(2);
map.put("b",cc);
cc=new Bean();
cc.set(3);
map.put("c",cc); System.out.println(((Bean)map.get("a")).get());
}
}
c是引用,几次set都是修改的同一个对象,而添加到map里的都是同一个对象
((Bean)map.get("a")).get(); 编译期间只要转换后的类型中确实有被操作的方法,例如:Bean类中有get()方法。编译器是不会管你把芙蓉姐姐转成李嘉欣,还是把周杰伦转换成李宇春的。
只有在运行时,JVM发现如果不能转换(例如:周杰伦转换成李宇春),才会抛出ClassCastException异常。另外,也可以考虑使用泛型机制。