A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java冬冬 高级黑马   /  2013-5-11 11:43  /  1606 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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. }
复制代码
执行结果:


6 个回复

倒序浏览
怎么又是一个吻。{:soso_e152:}
回复 使用道具 举报
原因看附件
你把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
回复 使用道具 举报
你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)) ;
复制代码
这样就可以了。
回复 使用道具 举报
每次调用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: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了。
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马