当前位置: 首页 > ds >正文

Kotlin变量与数据类型详解

Kotlin 变量与基本数据类型详解

一、变量声明

1. val vs var

  • val:不可变变量(只读),类似 Java 的 final
  • var:可变变量
val name = "Kotlin"   // 类型推断为 String
var age = 25          // 类型推断为 Int// name = "Java"      // 编译错误:Val cannot be reassigned
age = 26              // 合法操作

2. 显式类型声明

val score: Double = 95.5
var isStudent: Boolean = true

二、基本数据类型

1. 数值类型

类型位宽范围示例
Byte8-128 ~ 127val b: Byte = 127
Short16-32768 ~ 32767val s = 32767
Int32-2^31 ~ 2^31-1val i = 42
Long64-2^63 ~ 2^63-1val l = 123L
Float32约±3.4e38val f = 3.14f
Double64约±1.7e308val d = 3.14

注意:Kotlin 中没有隐式类型转换,必须显式转换:

val numInt: Int = 100
val numLong: Long = numInt.toLong()  // 正确
// val numLong: Long = numInt       // 错误

2. 布尔类型(Boolean)

val isTrue: Boolean = true
val isAdult = age >= 18  // 推断为 Boolean

3. 字符类型(Char)

使用单引号,支持 Unicode:

val letter: Char = 'A'
val unicodeChar = '\u0041'  // 'A'

4. 字符串(String)

  • 支持模板表达式
  • 原生字符串(保留格式)
// 普通字符串
val message = "Hello, $name! Age is ${age + 1}"// 多行文本
val text = """First lineSecond lineThird line
""".trimIndent()

三、数组类型

1. 通用数组(Array)

// 创建方式1:arrayOf
val numbers = arrayOf(1, 2, 3)// 创建方式2:工厂函数
val zeros = Array(3) { 0 }  // [0, 0, 0]// 访问元素
println(numbers[0])  // 输出 1

2. 基本类型数组

更高效,避免装箱拆箱:

val intArray: IntArray = intArrayOf(1, 2, 3)
val charArray = charArrayOf('a', 'b', 'c')

四、特殊类型

1. Any 类型

所有类的超类(类似 Java 的 Object):

val anyValue: Any = 42  // 可接受任意类型

2. Unit 类型

相当于 void,用于无返回值函数:

fun printMessage(): Unit {println("This returns Unit")
}

3. Nothing 类型

表示永不返回的函数:

fun fail(): Nothing {throw RuntimeException("Error occurred")
}

五、类型检查与转换

1. 智能类型推断

when (val obj: Any = "Kotlin") {is String -> println(obj.length)  // 自动转换为 Stringis Int -> println(obj + 1)
}

2. 安全转换

val str: String? = "123"
val num: Int? = str as? Int  // 安全转换,失败返回 null

六、总结对比

特性KotlinJava
变量声明val/var + 类型推断显式类型声明
空安全内置(?符号)需额外注解
基本类型全对象化原始类型 + 包装类
数组Array + 基本类型专用数组单一数组类型

建议在实际编码中充分利用类型推断和安全特性,写出更简洁、安全的 Kotlin 代码。

http://www.xdnf.cn/news/6924.html

相关文章:

  • C++ - 仿 RabbitMQ 实现消息队列(2)(Protobuf 和 Muduo 初识)
  • DeepSeek 赋能军事:重塑现代战争形态的科技密码
  • Florence2代码实战
  • 初识计算机网络。计算机网络基本概念,分类,性能指标
  • 终端和shell , 以及XShell 用ssh命令登陆主机的过程
  • Spring三级缓存的作用与原理详解
  • 内网环境下如何使用ntpdate实时同步时间
  • java+selenum专题(一)
  • Java 与 面向对象编程(OOP)
  • dify知识库支持图文回复实践
  • 【Win32 API】 lstrcpynA()
  • 浮动静态路由配置实验
  • 使用 Cookie 实现认证跳转功能
  • 用Python绘制梦幻星空
  • 5.9/Q1,GBD数据库最新文章解读
  • 华三H3C交换机配置NTP时钟步骤 示例
  • STM32F103经SPI总线向写Micro SD卡
  • 逻辑回归预测考试通过
  • 深入GoFrame框架:GToken的优势、实践与踩坑经验分享
  • leetcode0215. 数组中的第K个最大元素-medium
  • 聊一聊接口测试的一致性如何处理?
  • Sumsub Java Web Demo 技术文档
  • 从零开始学习three.js(20):three.js实现天气与时间动态效果(白天,黑夜,下雨,下雪)
  • 基于亚博K210开发板——六轴姿态传感器 icm20607陀螺仪读取原始数据测试
  • freertos中xTaskCreate和vTaskDelete详解
  • 如何提高redis缓存命中率
  • display:grid网格布局属性说明
  • 运营级 印度Rummy源码
  • 收放卷“材料停机减速距离“计算FC(算法公式+ST源代码+C++代码)
  • 考研数学微分学(第一讲)