Kotlin手记-(9)类型转换

在Kotlin中,一种类型的数值不会自动转换为另一种类型,即使另一种类型更大。

接下来我们定义两个变量一个int型的a并且进行赋值,一个定义long型的,并把a赋值给b,也就是吧int型的值赋值给long的变量看可不可以?

    var a:Int = 4
    var b:Long = a

上面的代码是编辑器中是标红的,提示类型不匹配,需要把b的类型由Long(64位)型修改成Int(32位)才行,当我把类型替换后,错误就消失了。从编辑器的代码中就可以看的出来,低位类型的值不能赋值给高位类型的变量,不过我们可以通过对象提供的方法我们显示转换把低位的值进行位提升就可以了,比如Int型转换成Long型

    var a:Int = 4
    var b:Long = a.toLong()

这样子a就可以通过调用toLong()方法后就可以直接赋值给类型是Long的b了。

Kotlin所有的数值类型都提供的相互转换的to方法了

  • toByte() - 将字符串解析为带符号的字节数,然后返回结果。
  • toShort() - 将 Int 值转换为Short。
  • toInt() - 将字符串解析为Int数字并返回结果。
  • toLong() - 将字符串解析为Long数字并返回结果。
  • toFloat() - 将字符串解析为Float数字并返回结果。
  • toDouble() - 将字符串解析为Double数字并返回结果。
  • toChar() - 将Int值转换为Char。

上面的都是低位向高位转换,那反过来高位向低位转换呢?

    var a:Long = 4
    var b:Int = a
编辑器也会提示:类型不匹配
Kotlin: Type mismatch: inferred type is Long but Int was expected

实际也也是一样的,也是可以通过对应的to方法进行转换,但是在高位向低位转换的时候有可能会对数值进行截断,从而使数值发生变化导致错误,我们把一个Int型的a=8888转换Byte会如何呢

    var a: Int = 888
    var b: Byte = a.toByte()
    println("a=" + a)
    println("a.toByte()后赋值给b=" + b)
    
    输入结果:
    a=888
    a.toByte()后赋值给b=120

a在转换的时候,由888变成了120,这个就是高位转换低位导致截断,假如a小于120就不会出现这种情况。被转换的值在转换后的范围内是没有被截断的可能的

Boolean是不能和任何类型进行相互转换的。

自动提升

并不是说类型不能自动转换提升,这个是需要一个前提的,前提是运算符,在类型参与了算术运算的时候会进行相应的类型提升的

  var a: Int = 888
  var b: Byte = 5
  var c:Int = a+b

b在和a进行求和计算的时候会转换,b的实际类型是没有变化的

友情关注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值