Kotlin 基本数据类型

1. 基本数据列表

类型字节数
Byte1
Short2
Int4
Long8
UByte, UShort, UInt, ULong无符号整形
Float4
Double8
Boolean通常1字节
Char2
String
Array数组
IntArray, ByteArray 等无装箱开销的专用数组类,性能更好

2. 声明及赋值

2.1变量定义

变量定义用var或val

var i: Int = 1

// val定义的变量不能改变
val j: Int = 1  
// j = 2  // 错误
2.2 常量
// 编译期常量 const val
const val PI: Double = 3.14
2.3 类型推断

Kotlin 拥有强大的类型推断能力,所以不需要显式声明变量的类型

var i = 1 // 编译器推断为 Int
// 为什么是Int, 而不是Byte, 往下看
2.4 字面量 (Literal constants)
2.4.1 数字字面量

整形的字面量, 默认是Int, 浮点数字面量默认是Double

val a = 1        // Int, 整形默认Int
val b = 1L       // Long,  加L 就是Long
val threeBillion = 3000000000 // Long, 超出了Int的范围
val c: Byte = 1  // Byte

val i1 = 0xFF         // Int, 十六进制 0x/0X开头
val i2 = 0b00001011   // Int, 二进制 0b开头

val u1 = 1U    // UInt
val u1 = 1UL   // ULong

val f1 = 1.0    // Double, 浮点型默认Double
val f2 = 3.14F  // Float, 加F/f就是Float
2.4.2 Boolean字面量
// 只有ture和false
val b  = true
2.4.2 Char字面量
val c1 = 'a'
val c2 = '\n'
val c3 = '\uFF00'  // Unicode
2.4.3 String字面量
// 常规
val str = "abc 123"

// 字符串模板: $变量名,   ${表达式}
val a = 1
val score = 100
val s = "hello, your order is $a, your score is ${score * 100}"
println(s)
// hello, your order is 1, your score is 10000

// 字符串也可以用+连接
val s1 = "hello, your order is " +  a + ", your score is " +  (score * 100)
2.4.4 多行模式字符串

三个引号之间是多行文本,可以包括\n, "等, 不会被转义,而且空行和空格也会原样保留。 字符串模板($x)生效

trimIndent()可以去除第一行和最后一行的空行, 去除每行前的空格, 但是空格数都是最左边的行的空格数

trimMargin()可以去除第一行和最后一行的空行, 去除每行前的|前的空格,|是默认的分隔符,也可以自己指定。

fun main() {
    println("-----------------")

    val text1 = """
        hello \n
           world '   "
    1111
         222
    """
    println(text1)

    println("-----------------")

    val text2 = """
        hello \n
           world '   "
    1111
         222
    """.trimIndent()
    println(text2)

    println("-----------------")


    val text3 = """
        |hello \n
           |world '   "
    |1111
         |222
    """.trimMargin()
    println(text3)

    println("-----------------")
}

// 输出:
-----------------

        hello \n
           world '   "
    1111
         222
    
-----------------
    hello \n
       world '   "
1111
     222
-----------------
hello \n
world '   "
1111
222
-----------------
2.4.5 原样输出$
// 可以用\$ 或 ${'$'}, 多行模式因为\不会转义,所以只能用${'$'}
val a = 1
val s = """
    hello ${'$'}b
    """.trimIndent()
println(s)
// hello $b
2.4.6 字符串格式化
// 类似java
val s = String.format("Your name is %s, your score is %.2f", "James Chang", 56.3456)
println(s)
// Your name is James Chang, your score is 56.35

3. 数组

数组表示一组相同类型的元素

// 类型推断为 Array<Int>, 元素实际上包装类型
val arr = arrayOf(1, 2, 3) //

// 相当于java中 int[]
val intArr = intArrayOf(1, 2, 3)  // 类型是IntArray
println(intArr[0])  // 获取元素
intArr[0] = 100     // 修改元素


val arr = Array(5) {1}  // 5个元素, 每个元素都是1

4. 类型转换

不同数据类型不能直接转换, 必须用方法

val a: Int = 1
val b: Long = a  // 错误

// 必须用相应的方法
val b1: Long = a.toLong()

3.5.roundToInt()  // 4

// 运算会自动转换
val c: Long = 1L + 3       // Long + Int => Long

5. 可空类型 (nullable)

这些类型都有对应的可为null类型,也就是说Int不能为null, 后面加?就变成了可空类型Int?

Int, Float这些不可空类型在在JVM中相当于java的int, float等, 而Int?, Float?相当于java的Integer, Float等

// var a: Int = null // 错误

var a = 1  // a的类型是Int
var b: Int? = null // ok

// as 强转
a = b as Int  // runtime error,  如果b有值就正确

b = a  // ok 相当于自动装箱
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大勇学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值