Kotlin - 基本数据类型

和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 // 一个隐式装箱的 

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值