1、使用场景:

  强制类型转换,有可能会导致异常。is与as就是为了解决这一问题,is与as永远不会抛出异常。

2、is判断一个对象是否兼容于指定的类型,考虑里氏代换。Dog是Animal,而Animal不是Dog。

3、as 与强制类型转换一样,区别是使用as是安全的。使用as如果转换失败,返回Null,不会抛出异常。

4、使用is和as可以取代强制类型转换,分别如下:  

 a、使用is
  if(a is Dog)
  {
    Dog d = (Dog)a;
    ...
  } b、使用as
  Dog d = a as Dog;
  if(d!=null)
  {
    ...
  }

  注意:二者效果一样,但是效率差别很大,使用is会检查两次对象的类型,一次是核实,一次是强制转换。使用as只进行了一次对象类型的检查。检查对象的类型,是个耗费资源的操作,首先要判断对象的实际类型,然后必须遍历继承树结构(层次结构),去与每个基类核对。

5、这个情况类似于C++的中map。在C++中,标准容器map的下标操作有一个危险的副作用,如果该键不存在,下标操作会插入一个具有该键的新元素,新元素的value使用默认构造方法。考虑下面的需求:根据key查找value,存在key,返回value,不存在key,返回null。为了避免出现上面的副作用,使用下面的办法:  

 a、使用count
  if(m.count(key)>)
  {
    return m[key];
  }
  else
  {
    return null;
  } b、使用find
  map<int,string>::iterator iter = m.find(key);
  if(iter!=m.end())
  {
    return *iter;
  }
  else
  {
    return null;
  }

  使用count,进行了两次查找。使用find只进行了一次查找。map 的内部实现使用了二叉树(AVL树或者红黑树),查找的时间效率为对数时间,会影响效率。因此,对于需求,根据key查找value,如果存在就使用,应该使用find。

随机推荐

  1. CPC23-4 K.喵喵的神·数

    题意:给出整数T,P,求c(T,P) mod P. 解法:用卢卡斯定理. 卢卡斯定理:解决c(n,m) mod p问题.Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) ...

  2. 连接Excel文件时,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

    问题与解决 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 错误. string strCon = " Provider = Microsoft.Jet.OL ...

  3. redis学习笔记之pipeline

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常 会阻塞并等待redi ...

  4. 【Python】python读取文件操作mysql

    尾大不掉,前阵子做检索测试时,总是因为需要业务端操作db和一些其他服务,这就使得检索测试对环境和数据依赖性特别高,极大提高了测试成本. Mock服务和mysql可以很好的解决这个问题,所以那阵子做了两 ...

  5. HDU 5679 Substring 后缀数组判重

    题意:求母串中有多少不同的包含x字符的子串 分析:(首先奉上FZU官方题解) 上面那个题就是SPOJ694 ,其实这两个题一样,原理每次从小到大扫后缀sa数组,加上新的当前后缀的若干前缀,再减去重复的 ...

  6. PHP 获取文件权限函数

    /* * substr 返回字符串的子串 * base_convert 在任意进制之间转换数字 * fileperms 取得文件的权限 */ // 获取权限 function getChmod($fi ...

  7. VMtools安装以及设置

    一.安装VMtools 点击VMware菜单的——虚拟机——安装VMware Tools,在弹出的对话框中选择“安装”.这时,在Ubuntu下会自动加载Linux版的VMware Tools的安装光盘 ...

  8. Linux服务器下没有root权限装Matlab R2013a

    Matlab R2013a Unix版下载地址 注意:由于我是在单位的集群系统上装Matlab,没有root权限,故下载下来的.iso文件不能在linux下用mount命令挂载,故先在Win下解压,再 ...

  9. JAVA 基础 重新开始

    之前做android开发,因为JAVA基础不牢固的原因,自己对写代码很不自信,很多时候要去找源码或者在相近的代码上修修改改以得到想要的结果,从某种意义上来说这根本算不上真正意义上的程序员.后来看到某位 ...

  10. xmpp 协议之可扩展消息(messaging)与状态(presence)协议核心: RFC 3920

    附:asmack已经不需要了,4.1以后的smack已经可以在android上使用了. XMPP Clients:   http://xmpp.org/software/clients.html An ...