is 和!is操作符,可以在运行时检查一个对象与一个给定的类型是否一致,或者使用与它相反的!is操作符

fun main(arg: Array<String>) {

    var a :Any= 1
if (a is String) {
print("是String")
}
if (a is Int) {
print("是Int")
}
}

智能类型的转换

fun main(arg: Array<String>) {

    demo("5")

    var x :Any = "a"
when(x){
is Int-> print(x+1)
is String-> print(x.length+1)
is IntArray-> print(x.sum())
}
}
fun demo(x:Any){
if (x is String){
print(x.length)//x 被自动转换为String类型
}
} //智能转换的前提条件:
// 1.局部的val变量:永远有效
// 2.val属性:如果属性是private的或者internal的或者类型检查处理与属性定义出现在同一个模块内,那么智能类型转换时有效的.对于opnefire属性,活存在自定义get方法
// 智能转换类型是无效的
// 3.局部的var变量:如果在类型检查语句与变量使用语句直接,变量没有被改变,而且它没有被lambda表达式捕获并在lambda表达式内修改它,那么智能类型转换时有效的
// 4.var属性:永远无效

强制类型转换

fun main(arg: Array<String>) {
var x :Any = "a"
val i = x as Int
print(i)
}

如果类型强制转换,而且类型不兼容,那么会抛类型转换异常,这是不安全的,不安全的类型转换使用中辍操作符as

为了避免抛异常.可以使用as? ,当类型转换失败时候回返回null,不再抛异常

最新文章

  1. asp.net后台注册js的四种方法
  2. [Aaronyang] 写给自己的WPF4.5 笔记19[Visual类图文并茂讲解]
  3. C# RSA PEM解密字符
  4. 夺命雷公狗ThinkPHP项目之----企业网站8之栏目的添加完善(无限极分类的完成)
  5. HDU 2151 Worm
  6. SQL语言笔记
  7. Default route and zero route
  8. 7种基本排序算法的Java实现
  9. Can&#39;t initialize OCI. Error -1
  10. Task类(任务)
  11. JsRender
  12. setTimeout()与setInterval()方法区别介绍
  13. redis的安装与配置
  14. python3 时间和日期
  15. django 下拉菜单显示为object的解决办法
  16. Micropython TurnipBit 青少年入门编程 交通灯实验
  17. 【java】doc转pdf
  18. 关于Java中static关键字的用法以及从内存角度解析
  19. Python数据库连接池DBUtils
  20. C#设计模式之十九策略模式(Stragety Pattern)【行为型】

热门文章

  1. MySQL详细知识点总结
  2. linux 基础12-程序与资源管理
  3. MySQL在command line Client下的一些命令
  4. Linux学习之六-Linux系统的基础优化
  5. Socket嵌套字通讯
  6. 快捷键IntelliJ IDEA For Mac
  7. Codeforces Round #539 (Div. 1) 1109F. Sasha and Algorithm of Silence's Sounds LCT+线段树 (two pointers)
  8. [Python自学] day-22 (1) (Session、CSRF、中间件)
  9. Codeforces Round #426 (Div. 2) B题【差分数组搞一搞】
  10. [Luogu] 区间统计Tallest Cow