您的位置:首页 > 其它

Kotlin - 基本数据类型

2016-10-14 11:44 281 查看
和Java一样,Kotlin也是基于JVM的,不同的是,后者是静态类型语言,意味着所有变量和表达式类型在编译时已确定。在Java中,通过装箱和拆箱在基本数据类型和包装类型之间相互转换,而,Kotlin中,所有变量的成员方法和属性都是对象。一些类型是Kotlin中内建,相当于创建的普通类,直接调用即可。

在Kotlin源代码中,不管是常量还是变量在声明是都必须具有类型注释或者初始化。如果在声明时,进行了初始化,会自行推导其数据类型,以为着常量或者变量注释类型。Kotlin中的数据类型包括数值类型、字符类型、布尔类型等。



数值类型

Kotlin的基本数值类型包括Byte、Short、Int、Long、Float、Double等。不同于Java的是,字符不属于数值类型。



注:在Kotlin中,字符类型不是基本数值类型,是一个独立的数据类型。

装箱

在java平台上,数值被JVM虚拟机以字节码的方式物理存储的,除非我们需要做可空标识(比如说 Int?) 或者是泛型调用的。在Kotlin中,并不是像Java那样,而是数值通过装箱存储的。

val a: Int = 10000
print (a === a ) //打印 'true'
val boxedA: Int? =a
val anotherBoxedA: Int? = a
print (boxedA === anotherBoxedA ) //注意这里打印的是 'false'

// 运行结果
true
false


从上述代码中,可以看出,保存的数值并未保留特征。

val a: Int = 10000
println (a == a ) //打印 'true'
val boxedA: Int? =a
val anotherBoxedA: Int? = a
println (boxedA == anotherBoxedA )

// 运行结果
true
true


从运行结果中可以看出,数值是相等的。

字符类型

字符类型用Char表示,其不能直接当作数值来使用。



字符是单引号包起来的 ‘1’ , ‘\n’ , ‘\uFF00’ ,可以通过显示转换将其转换为Int型。

fun check(c: Char) {
val i = c.toInt()// 显示转为Int类型
println("i = $i")
}

// 运行结果
i = 65


和数值类型一样,字符类型在空检查后会在需要的时候装箱,特性不会被装箱操作保留

的。

布尔类型

布尔值只有 true 或者 false

看Boolean源码可知,其内置的操作包括not(非)、and(与)、or(或)、xor(异或)、compareTo()等

/**
* Returns the inverse of this boolean.
*/
public operator fun not(): Boolean

/**
* Performs a logical `and` operation between this Boolean and the [other] one.
*/
public infix fun and(other: Boolean): Boolean

/**
* Performs a logical `or` operation between this Boolean and the [other] one.
*/
public infix fun or(other: Boolean): Boolean

/**
* Performs a logical `xor` operation between this Boolean and the [other] one.
*/
public infix fun xor(other: Boolean): Boolean

public override fun compareTo(other: Boolean): Int


字面常量

常量表达式的值需要在编译时就得到计算,因此对声明constexpr时用到的类型必须有所限制。因为这些类型一般比较简单,值也显而易见、容易得到,就把它们称为“字面值类型”(literal type)。

数值类型、引用和指针都属于字面值类型。某些类也是字面值类型,它们可能含有constexpr函数成员。自定义类Sales_item、IO库、string类型不属于字面值类型。

数值类型

--数型: 123
--长整型要加大写 L : 123L
--16进制:0x0f
--二进制:0b00001011


Kotlin不支持8进制

Kotlin中浮点数,默认为Doubles类型。若浮点数为Floats类型,需通过加f或F标识

-- 默认 Doubles : 123.5 , 123.5e10
-- Floats:123.5f ,12.44F


显示转换

//这是些伪代码, 不能编译的
val a: Int? =1 //一个装箱过的 Int
val b: Long? = a // 一个隐式装箱的


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: