Kotlin基础教程-基本数据类型

时间:2020-12-22 17:26:43

Basic Types

在Kotlin中,一切都是对象,任何变量都有函数和属性。但是有一些类型是嵌入式的,因为这样是最优化的。但是,用户可能会认为这些类型就是普通类。所以定义了一些基本类型:数值类型,字符类型,布尔类型和数组类型。

数值类型

Kotlin的数值类型,类似于Java,但也有差异处。例如,kotlin没有隐式转换,而且字面值也略有不同。

6种基本数值类型

下面类型和Java一样

类型 字节数 Java字节数
Double 64 64
Float 32 32
Long 64 64
Int 32 32
Short 16 16
Byte 8 8

字面常量

  • 10进制:123
    • Long类型,需要加L:123L
  • 16进制:0x0F
  • 二进制:0b00001011

8进制的字面值是不支持的。

Kotlin也支持传统浮点数表示法

  • 默认Double表示法:123.5, 123.5e10
  • 浮点数Float,用fF表示:123.5f

数值型中的下划线

类似于标准数值表示中带有,,在kotlin程序中中_替代,可读性更高

val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010

===与==

===,全等,引用和值都要相等

val a: Int = 10000
print(a === a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA === anotherBoxedA) // !!!Prints 'false'!!!

== 值相等

val a: Int = 10000
print(a == a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA == anotherBoxedA) // Prints 'true'

显式转换

段类型无法转换为长类型,如果非要转换,需要显式转换

val a: Int? = 1 
val b: Long? = a
print(a == b)

a和b无法进行比较,直接报错

Kotlin基础教程-基本数据类型

不同大小的数值型也不能相互赋值


val b: Byte = 1
val i: Int = b

Kotlin基础教程-基本数据类型

正确做法是使用显式转换方法:

val i: Int = b.toInt()

其他显式转换方法:

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

也有少量无需显式转换,比如根据上下文推断类型的,比如:

val l = 3L + 1

操作符

操作符 Java表示法 意义
shl(bits) << 左移
shr(bits) >> 右移
ushr(bits) >>> 无符号右移
and(bits) & 位和
or(bits) | 位或
xor(bits) ^ 按位异或
inv() ~ 位非

字符类型

Kotlin中用Char表示字符类型,非数值类型。字符类型不能直接当成数值类型

Kotlin基础教程-基本数据类型

可以使用显式转换

fun decimalDigitValue(c: Char): Int {
if (c !in '0'..'9')
throw IllegalArgumentException("Out of range")
return c.toInt() - '0'.toInt() // Explicit conversions to numbers
}

布尔值类型

True/False

  • || – 或
  • && – 并
  • ! - 非

数组类型

Array 类表示

含有get/set方法,以及属性size

class Array<T> private constructor() {
val size: Int
operator fun get(index: Int): T
operator fun set(index: Int, value: T): Unit

operator fun iterator(): Iterator<T>
// ...
}

创建array

val array1 = arrayOf(1,2,3)

创建空array

创建大小为4,类型为Int的数组

val array2 = arrayOfNulls<Int>(4)

带函数

创建一个Array[0,1,4,9,16]的数组,后面的函数是作用在每个元素上的

val asc = Array(5, { i -> (i * i).toString() })

与Java不同的是,Kotlin中的array是不可变的。

Array的衍生类

  • ByteArray
  • IntArray
  • ShortArray

创建特殊实例的Array

val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]

字符串

String表示

字符串为不可变对象,可用下标获取字符串每个字符

for (c in str) {
println(c)
}

"""

三个分隔号,可以包含多行字符串

val text = """
for (c in "foo")
print(c)
"""

Kotlin基础教程-基本数据类型

也可以后面跟上处理函数

val text = """
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
|(Benjamin Franklin)
"""
.trimMargin()

Kotlin基础教程-基本数据类型

trimMargin去除字符串的每行的空格和前缀。前缀默认是|,如果字符串的前缀有其他字符串,可以传入参数,来进行去除

Kotlin基础教程-基本数据类型

请关注我的微信公众号号,实时接收最新文章

Kotlin基础教程-基本数据类型