zoukankan      html  css  js  c++  java
  • 在小组里遇到的一个让我产生迷惑的题

    如上图,我模糊记得好像是hashtable是可以存一个'null'的key,值为'null'的键值对的,所以判断上面的那个是正确的···
    然后看别人的,说,hashtable存的是对象,可以直接跟null判断,dictionary<string,string>存的是引用,不能直接判断···
    接着又看到有人说,这两个都是错的,因为这两个都可以存一个键和值都为'null'的键值对···
    这下我的脑袋瓜子彻底变浆糊了···
    想起一句话,“实践出真知”,把代码敲出来运行了下下,嘿,事实证明,hashtable的判断是正确的,因为它出结果了,而dictionary<string,string>没有,可是为什么了?
    我try{}catch{}了下下,发现,dictionary<string,string>抛出了一个KeyNotfoundException的异常,而且是 throw的,想了下,这可能是hashtable存的是对象,可以直接跟null判断,dictionary<string,string>存的是引用,上面题中,都只是声明而没有赋值,hashtable因为是存对象的,所以可以直接判断,dictionary<string,string>存的是引用,在找“name1”的引用是,发现不存在,所以就抛出了KeyNotfoundException异常。
    总结:hashtable因为存的是对象,所以可以直接跟null判断,而dictionary<string,string>存的是引用,需要先判断查找的key是否存在,然后才能跟null判断。
    刚又临时起意,给这个题目里的两个东东在声明之后,都添加一个了一个键值对,ht.Add("name1", null);和dt.Add("name2", null);,然后果然出现问题了,两个if判断里的东西都会执行了,这明显不是我们要的结果,name1和name2明明都存在的,结果这么一判断成不存在了,很复杂,感觉这题出的有问题了,我们应该是去判断这个键是否存在才是,ht.ContainsKey("name1")和dt.ContainsKey("name2")这样才是正解。--By 2011-4-27 14:00:00
                                                    ----菜鸟见识,错者请指出
  • 相关阅读:
    jvm学习(重点)
    java单例模式之懒汉式分析
    spring中bean实例化时机以及整个运转方式
    servlet的总结
    NGINX location 在配置中的优先级
    java多态 以及静态绑定 动态绑定积累
    有关string stringbuff stringbuild 的区别
    java中静态变量,静态代码块,静态方法,实例变量,匿名代码块等的加载顺序
    java线程方面的知识
    Jmeter的接口测试简介
  • 原文地址:https://www.cnblogs.com/13142088/p/2030208.html
Copyright © 2011-2022 走看看