黑马程序员技术交流社区

标题: key找不到其对应的value??????? [打印本页]

作者: java冬冬    时间: 2013-5-11 11:43
标题: key找不到其对应的value???????
本帖最后由 java冬冬 于 2013-5-11 13:06 编辑

写了下面的代码,为什么这里的key找不到其对应的value,而返回的是null 呢????{:soso_e152:}
  1. import java.util.* ;
  2. class Person{
  3. private String name ;
  4. private int age ;
  5. public Person(String name,int age){
  6. this.name = name ;
  7. this.age = age ;
  8. }
  9. public String toString(){
  10. return "姓名:" + this.name + ";年龄:" + this.age ;
  11. }
  12. }
  13. public class HashMapDemo{
  14. public static void main(String args[]){
  15. Map<Person,String> map = null ;
  16. map = new HashMap<Person,String>() ;
  17. map.put(new Person("java冬冬",22),"itheima"); // 增加内容
  18. System.out.println(map.get(new Person("java冬冬",22))) ;
  19. }
  20. }
复制代码
执行结果:



作者: Jacky_Chen1990    时间: 2013-5-11 11:44
怎么又是一个吻。{:soso_e152:}
作者: hou604720966    时间: 2013-5-11 12:02
原因看附件
你把main方法改成这个就行了
public static void main(String args[]){

Map<Person,String> map = null ;
Person pr = new Person("java冬冬",22);
map = new HashMap<Person,String>() ;

map.put(pr,"itheima"); // 增加内容

System.out.println(map.get(pr)) ;

}

2013-05-11_115702.jpg (36.24 KB, 下载次数: 0)

2013-05-11_115702.jpg

作者: 飞鸟青崖    时间: 2013-5-11 12:03
你put的时候是一个Person对象,get的时候又是一个Person对象,当然找不到了。你可以写成
  1. map = new HashMap<Person,String>() ;
  2.                 Person p = new Person("java冬冬",22);//把对象固定
  3.                 map.put(p,"itheima"); // 增加内容
  4.                 System.out.println(map.get(p)) ;
复制代码
这样就可以了。
作者: long    时间: 2013-5-11 12:13
每次调用new Person("java冬冬",22)都会返回一个新的Person对象的引用,因此输出语句打印的是null。楼主看一下下面的答案吧:
  1. import java.util.* ;
  2. class Person{
  3. private String name ;
  4. private int age ;
  5. public Person(String name,int age){
  6. this.name = name ;
  7. this.age = age ;
  8. }
  9. public String toString(){
  10. return "姓名:" + this.name + ";年龄:" + this.age ;
  11. }
  12. }
  13. public class HashMapDemo{
  14. public static void main(String args[]){
  15. Map<Person,String> map = null ;
  16. map = new HashMap<Person,String>() ;
  17. Person p = new Person("java冬冬", 22);
  18. map.put(p,new String("itheima")); // 增加内容
  19. System.out.println(map.get(p));
  20. }
  21. }
复制代码

作者: 白磊    时间: 2013-5-11 12:13
本帖最后由 白磊 于 2013-5-11 12:24 编辑

你把主函数这样写就可以得到了        
public static void main(String args[]) {
                Map<Person, String> map = null;
               
                map = new HashMap<Person, String>();
               
                Person p=new Person("java冬冬", 22);
                map.put(p, "itheima"); // 增加内容
                System.out.println(map.get(p));
        }

因为你前面的put()和get()方法里都有     new HashMap<Person, String>(),两次new的是两个对象,而第二次new的没有put的情况下当然是空null了。
作者: 炉海佳    时间: 2013-5-11 12:35
  1. import java.util.* ;
  2. class Person{
  3. private String name ;
  4. private int age ;
  5. public Person(String name,int age){
  6. this.name = name ;
  7. this.age = age ;
  8. }
  9. public String toString(){
  10. return "姓名:" + this.name + ";年龄:" + this.age ;
  11. }
  12. }
  13. class HashMapDemo{
  14. public static void main(String args[]){
  15. Map<Person,String> map = null ;
  16. map = new HashMap<Person,String>() ;
  17. Person ps=new Person("java冬冬",22);//这里只有一个person对象
  18. map.put(ps,"itheima"); // 你之前做的是new了两个不同的person对象
  19. System.out.println(map.get(ps)) ;//传入同一个ps,编译通过,运行正常
  20. }
  21. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2