一、属性声明
| 顶层属性(top-evel property) | 在 .kt 文件中声明的。 |
| 类的属性(class property) | 在类中声明的。 |
| 局部属性(local property) | 在函数中声明的。 |
| 关键字 | 名称 | 说明 | 使用场景 | 转为Java代码 |
|
var variable的缩写 读作 [vɑ:r] |
可变属性 |
带有getter、setter | 赋值可被修改时使用(可读可写) | private |
|
val value的缩写 读作 [væl] |
只读属性 |
在函数外使用(修饰属性):带有getter,重写该函数可以实现每次返回不同值。 | 不需要再被赋值时使用(只读) | private final |
| 运行时常量 | 在函数内使用(修饰局部):无法实现getter也不满足const条件,无法分配新值因而可看作常量。 | |||
| const val | 编译时常量 |
只能在函数外使用:因为编译时就需要赋值,而函数是运行时才调用。只能修饰 String 或 基本数据类型,因为是 public 没有 getter 性能更优。 | 需要供全局调用的时候使用(常量) | public static final |
Kotlin {
//完整格式:关键字 变量名 冒号 数据类型 赋值运算符 值
var num: Int = 3 //默认是public的
val str = "haha" //简写格式,类型可自动推导
const val ch = 'A'
}
//点击 Tools->Kotlin->Show Kotlin ByteCode查看
Java {
private int num = 3;
public final int getNum() { return num; }
public final void setNum(int var0) { num = var0; }
private final String str = "haha";
public final String getStr() { return str; }
public static final char ch = 'A';
}
二、基本数据类型
Kotlin 中没有基础数据类型,只有封装的数字类型(首字母大写了)。除以0会得到NaN,表示不是一个数,因此无法比较,所以两个NaN的结果不相等。

| 类型 | 名称 | 位宽 | 占用字节 | 取值范围 | 具体数值 |
| Byte | 字节 | 8 | 1 | -2^7 ~ 2^7-1 | -128 ~ 127 |
| Short | 短整型 | 16 | 2 | -2^15 ~ 2^15-1 | -32768 ~ 32767 |
| Int | 整型 | 32 | 4 | -2^31 ~ 2^31-1 | -2147483648 ~ 2147483647 |
| Long | 长整型 | 64 | 8 | -2^63 ~ 2^63-1 | -9223372036854774808 ~ 9223372036854774807 |
| Float | 单精度 | 32 | 4 | 小数点后6位 |
.MIN_VALUE指最小非0正数,需要负数得加个负号。 |
| Double | 双精度 | 64 | 8 | 小数点后15-16位 | |
| Boolean | 布尔 | true 或 false | |||
| Char | 字符 | 16 | 2 |
只能和 Int 类型进行加减 可显示地转换为 Number 类型 |
\t 制表符 \b 退格键(键盘上的←) \n 回车 \r 光标回到行首 \' 单引号 \" 双引号 \\ 反斜杠 \$ 美元符号 |
//支持自动类型推断:对于已声明并赋值的变量,允许省略数据类型的声明
val aaa : Byte = 2 //不支持推断简写
val bbb : Short = 2 //不支持推断简写
val ccc : Int = 2 //val ccc = 2,Int是系统默认的整数类型
val ddd : Long = 2 //val ddd = 2L,用L结尾区分于Int
val eee : Double = 12.34 //val eee = 12.34,Double是系统默认的小数类型
val fff : Float = 12.34 //val fff = 12.34F,用F结尾区分于Double
val ggg : Char = 'a' //val ggg = 'a'
val hhh : String = "Hello" //val hhh = "Hello"
val iii : Boolean = false //val iii = false
val jjj = aaa + bbb //jjj为Int类型
val kkk = ccc + ddd //kkk为Long类型
val lll = 'a' + 1 //打印:b
三、进制(不支持8进制)
| 二进制 | 0b00001011 | 以 0b 开头 |
| 十六进制 | 0x0F | 以 0x 开头 |
四、类型转换
Kotlin 数据类型都是一个封装的 class,较小类型并不是较大类型的子类,不能隐式转换只能显示转换。
| toByte() | 转换为 Byte |
| toShort() | 转换为 Short |
| toInt() | 转换为 Int |
| toLong() | 转换为 Long |
| toFloat() | 转换为 Float |
| toDouble() | 转换为 Double |
| toChar() | 转换为 Char |
五、类型检测 is、!is
用来检查该对象(变量)是否属于某数据类型或其派生类,类似于 Java 中的 instanceof。
//多使用智能类型转换,避免使用强转
if(obj is String) {
obj + "abc" //obj智能类型转换为String
}
六、强制类型转换 as、as?
用来将某种类型的变量强制转换成另一种类型。
|
as 强转运算符 | 转换不成功抛异常 ClassCastException。 |
|
as? 安全转换运算符 | 转换不成功返回null。 |
//处理不确定类型的对象
fun demo(obj: Any) {
val str = obj as? String
//配合 ?: 提供为null时的默认值
print("字符串的长度为:${str?.length ?: "不是字符串"}")
}
本文详细介绍了Kotlin中的变量声明,包括var、val、const val的区别以及它们对应的Java代码转换。讲解了Kotlin的数据类型,如Byte、Short、Int、Long、Float、Double、Char及其转换规则。同时,还讨论了类型检测关键字is、!is的使用。
881






