在 Kotlin 中,所有东西都是对象,在这个意义上讲我们可以在任何变量上调用成员函数和属性。Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于Java的是,字符不属于数值类型,是一个独立的数据类型。
Kotlin 中没有基础数据类型,只有封装的数字类型,你每定义的一个变量,其实 Kotlin 帮你封装了一个对象,这样可以保证不会出现空指针。数字类型也一样,所有在比较两个数字的时候,就有比较数据大小和比较两个对象是否相同的区别了。
在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小。
fun main(args: Array<String>) {
val a: Int = 10000
println(a === a) // true,值相等,对象地址相等
//经过了装箱,创建了两个不同的对象
val boxedA: Int? = a
val anotherBoxedA: Int? = a
//虽然经过了装箱,但是值是相等的,都是10000
println(boxedA === anotherBoxedA) // false,值相等,对象地址不一样
println(boxedA == anotherBoxedA) // true,值相等
}
这里我把 a 的值换成 100,这里应该跟 Java 中是一样的,在范围是 [-128, 127] 之间并不会创建新的对象,比较输出的都是 true,从 128 开始,比较的结果才为 false。
java和kotlin都是一样的:
btye 1个字节
short 2个字节
int 4个字节
long 8个字节
float 4个字节
double 8个字节
类型转换
byte - (short , char) - int - long - float - double
较小的类型不能隐式转换为较大的类型(而java中是可以隐式的自动类型转化的)
java中
自动类型转换:由优先级低的数据类型转向优先级高的数据类型。
举例:char c = 10 ;
int b = c ;
long d = c ;
强制类型转换:由优先级高的数据类型转向优先级低的数据类型。
举例: float f = 3 ;
int a = f ; (编译器会报错),正确的写法是:int a =(int) f ;
很显然,这样的转换可能会导致数据溢出或是精度下降。
kotlin中
较小的类型不能隐式转换为较大的类型
val b: Byte = 1 // OK, 字面值是静态检测的
val i: Int = b // 错误
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
字面常量
数值常量字面值有以下几种:
十进制: 123
Long 类型用大写 L 标记: 123L
十六进制: 0x0F
二进制: 0b00001011
注意: 不支持八进制
Kotlin 同样支持浮点数的常规表示方法:
默认 double:123.5、123.5e10
Float 用 f 或者 F 标记: 123.5f
字符
和 Java 不一样,Kotlin 中的 Char 不能直接和数字操作,Char 必需是单引号''包含起来的。比如普通字符 '0','a'。
数组
数组用类 Array 实现,并且还有一个 size 属性及 get 和 set 方法,由于使用 [] 重载了 get 和 set 方法,所以我们可以通过下标很方便的获取或者设置数组对应位置的值。
与 Java 不同的是,Kotlin 中数组是不型变的(invariant)。
[] 运算符代表调用成员函数 get() 和 set()。
数组的创建两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数。
fun main(args: Array<String>) {
//数组的创建(数组不可变)
//一种是使用函数arrayOf();
val a= arrayOf(1,3,3)
//另外一种是使用工厂函数,接受数组大小和一个函数参数,用作参数的函数能够返回给定索引的每个元素初始值
val b=Array(3, { i -> (i * 2) })//i取0,1,2
//for 循环
for ( c in a.indices){
println("a[$c]="+a[c])
}
for (d in b.indices){
println("b[$d]="+b[d])
}
输出:
a[0]=1
a[1]=3
a[2]=3
b[0]=0
b[1]=2
b[2]=4
}
网友评论