kotlin数据类型

数据类型

在 Kotlin 中,所有变量的成员方法和属性都是一个对象。一些类型是内建的,它们的实现是优化过的,但对用户来说它们就像普通的类一样。

  1. 基本数据类型:Kotlin 提供了与 Java 类似的基本数据类型,包括:Byte、Short、Int、Long、Float、Double、Boolean 和 Char。
  2. 字符串类型:Kotlin 中的字符串类型为 String,它是不可变的,可以使用双引号或三引号来定义字符串。
  3. 数组类型:Kotlin 中的数组类型为 Array,它可以存储相同类型的多个元素,并且大小可以在运行时动态修改。
  4. 列表类型:Kotlin 中的列表类型为 List 和 MutableList,它们可以存储相同类型的多个元素,但 List 是不可变的,而 MutableList 是可变的。
  5. 集合类型:Kotlin 中的集合类型包括 Set 和 Map,它们可以存储不同类型的多个元素,但 Set 中的元素是唯一的,而 Map 中包含键值对。
  6. 元组类型:Kotlin 中没有内置的元组类型,但我们可以使用 Kotlin 的类、数据类或数据类的组件来模拟元组。
  7. 枚举类型:Kotlin 中的枚举类型为 enum class,它可以表示一组有限的、命名的值。
  8. 空类型:Kotlin 中的空类型为 null,可以用于表示缺少值或无效状态。

数值

Kotlin 处理数值的方法和 java 很相似,但不是完全一样。比如,不存在隐式转换数值的精度,并且在字面上有一些小小的不同。

Kotlin 提供了如下内建数值类型(和 java 很相似):

类型占位
Double64
Float32
Long64
Int32
Short16
Byte8

字面值常量

主要是以下几种字面值常量:

  • 长整型要加大写 L : 123L
  • 默认双精度浮点数(Double) : 123.5 , 123.5e10
  • 单精度浮点数(Float)要添加 f 或 F :123.5f

数值常量中可以添加下划线分割

您可以使用下划线增加数值常量的可读性:

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? =1 // 一个装箱过的 Int (java.lang.Integer)
val b: Long? = a // 一个隐式装箱的 Long (java.lang.Long)
print( a == b )// 很惊讶吧 这次打印出的是 'false' 这是由于 Long 类型equals() 只有和 Long 比较才会相同

短类型是不会隐式转换为长类型的。这意味着我们必须显式转换才能把Byte 赋值给 Int

val b: Byte = 1 // OK, 字面值常量会被静态检查
val i: Int = b // ERROR

我们可以通过显式转换把数值类型提升

val i: Int = b.toInt() // 显式转换

每个数值类型都支持下面的转换:
toByte(): Byte

toShort(): Short

toInt(): Int

toLong(): Long

toFloat(): Float

toDouble(): Double

toChar(): Char

字符串

字符串是由 String 表示的。字符串是不变的。字符串的元素可以通过索引操作读取: s[i] 。字符串可以用 for 循环迭代:

val str :String = "sssdsss";
println(str[3])
for (c in str) {
println(c);
}

trim-margin()函数移除空格:

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

字符串模板

val str :String = "d"
println("s$str")     //打印sd
println("s${str}s")  //打印sds

any和nothingAnyNothing 是 Kotlin 中的两个特殊类型。

  1. AnyAny 是 Kotlin 中的根类型,它是所有非空类型的超类型。类似于 Java 中的 Object 类型,可以用来表示任何类型的值。例如,我们可以将一个 Int 值赋给一个 Any 类型的变量,如下所示:

    val x: Any = 42
    
  2. NothingNothing 是 Kotlin 中的特殊类型,它表示不可能存在的值或永远不会返回的函数。例如,当一个函数永远不会返回时,可以将其声明为返回类型为 Nothing。例如:

    fun fail(message: String): Nothing {
        throw IllegalStateException(message)
    }
    

    在上面的示例中,fail 函数永远不会返回,因为它总是抛出一个异常。

    另一个常见的用例是当我们在一个 when 表达式中覆盖了所有可能的情况时,可以将其返回类型声明为 Nothing。这样做可以让编译器知道这个 when 表达式是完备的,不需要添加 else 分支。

    fun process(x: Any) {
        when (x) {
            is String -> println(x.length)
            is Int -> println(x * 2)
            else -> throw IllegalArgumentException("Unknown type")
        }
    }
    

    在上面的示例中,当 x 不是 StringInt 类型时,我们抛出了一个异常,因此我们可以将 process 函数的返回类型声明为 Nothing。这样做可以让编译器知道,当 x 的类型不是 StringInt 时,这个函数不会返回任何值。

需要注意的是,虽然 AnyNothing 都是 Kotlin 中的特殊类型,但它们的用途和语义完全不同。Any 是所有非空类型的超类型,而 Nothing 是表示不可能存在的值或永远不会返回的函数的特殊类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值