Byte、Short、Int、Long、Float、Double\n\n不同于Java,字符不属于数值类型,是一个独立的数据类型。
十进制:123
长整型:123L
16进制以0x开头:0x0F
2进制以0b开头:
注:不支持8进制
Double写法:123.5,123.5e10
Floats使用f或F后缀:123.5f
Kotlin中没有基础数据类型,只有封装的数据类型,你每定义一个变量,其实Kotlin就帮你封装了一个对象。这样可以保证不会出现空指针。数字类型也一样,所以在比较两个数字的时候,就有比较数据大小和比较两个对象是否相同的区别。在Kotlin中,三个等号===表示比较对象地址,两个等号==表示比较两个值大小。
val a:Int = 10000\nLog.i(“aaaaaa”,(a===a).toString())//true,值相等,对象地址相等//经过装箱,创建了两个不同的对象\nval boxedA:Int? = a\nval boxedB:Int? = a\nLog.i(“aaaaaa”,(boxedA===boxedB).toString())//false,值相等,但对象地址不同\nLog.i(“aaaaaa”,(boxedA==boxedB).toString())//true,值相等
由于不同的表示方式,较小类型并不是较大类型的子类型,较小的类型不能隐式转换为较大的类型。这意味着在不进行显式转换的额情况下我们不能把Byte型值赋给一个Int变量。
val b:Byte = 1//ok,字面值式静态检测的
val i:Int = b//错误
我们可以代用其toInt()方法
val b:Byte = 1//ok,字面值式静态检测的
val i:Int = b.toInt()//ok
每种数据类型都有下面的这些方法,可以转化为其它的类型:
toByte():Byte
toShort():Short
toInt():Int
toLong():Long
toFloat():Float
toDouble():Double
toChar():Char
有些情况下也是可以使用自动类型转化的,前提是可以根据上下文环境推断出正确的数据类型而且数学操作符会做相应的重载。
val l = 1L + 3
//Long + Int => Long
对于Int和Long类型,还有一系列的位操作符可以使用,分别是
shl(bits) - 左移位(Java’s <<)
shr(bits) - 右移位(Java’s >>)
ushr(bits) - 无符号右移位(Java’s >>)
and(bits) - 与
or(bits) - 或
xor(bits) - 异或
inv() - 反向
示例
val a = 5
val b = a shl 2
Log.i(“aaaaaa”,b.toString())输出20
字符均使用单引号,如:‘1’,‘a’
Kotlin中字符不能和数字直接操作
c == 1 //错误写法
我们可以显示地把字符转为Int数字
val c:Char = ‘1’
c.toInt() == 1 // true
当需要可空引用时,字符、数字会被装箱。装箱不会保留同一性。
布尔用Boolean类型表示,它有两个值:true和false。若需要可空引用布尔会被装箱。\n\n内置布尔运算有:
|| – 或
&& – 与
! – 非
创建数组的两种方式
//[1,2,3]
val a = arrayOf(1,2,3)
//[0,2,4]
val b = Array(3) { i -> (i * 2) }
//读取数组内容Log.i(“aaaaaa”,a[0].toString())\nLog.i(“aaaaaa”,b[1].toString())
除了类Array,还有ByteArray、ShortArray、IntArray,用来表示各个类型的数组,省去了装箱操作,因此效率更高。
val x:IntArray = IntArrayOf(1,2,3)
x[0] = x[1] + x[2]
方括号可以很方便的获取字符串中的某个字符,也可以通过for循环来遍历
val str = “aeiou”
for (c in str){
Log.i(“aaaaaa”,c.toString());
}