Kotlin 学习记录
1
| 本文只记录重要的或者与C/C++、Java 出入较大的内容
|
Kotlin 变、常量用法
- 在类中定义变量必须初始化,暂时不能初始化的可用lateinit[后期初始化]关键字声明
- lateinit只能声明于 var 变量(不能为可空变量、不能为基本数据类型、使用变量前必须赋值)
- 延后初始化。只能用于只读变量。
1 2 3 4 5 6 7 8 9 10 11 12 13
| private val mTitles : Array<String> by lazy { arrayOf( ctx.getString(R.string.tab_title_android), ctx.getString(R.string.tab_title_ios), ctx.getString(R.string.tab_title_h5) ) }
private val mStr : String by lazy{ "我是延迟初始化字符串变量" }
|
- val 不是常量,是不可修改的变量。常量为 const val 且 const 不能用于修饰var
- 常量声明的三种正确方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| const val NUM_A : String = "顶层声明"
object TestConst{ const val NUM_B = "object修饰的类中" }
class TestClass{ companion object { const val NUM_C = "伴生对象中声明" } }
fun main(args: Array<String>) { println("NUM_A => $NUM_A") println("NUM_B => ${TestConst.NUM_B}") println("NUM_C => ${TestClass.NUM_C}") }常量声明的三种正确方式
|
数据类型
- Kotlin当中不支持8进制
1 2 3
| var num16 = 0x0F var num2 = 0b11110001 var num10 = 123
|
- Kotlin中可以通过下划线作数值中的逗号
1 2
| var oneMillion = 1_000_000 println("var oneMillion = 1_000_000 => var oneMillion = $oneMillion")
|
- 数值比较:== 比较值,===比较内存中的地址
- 位运算大有不同:
1 2 3 4 5 6 7 8 9
| var operaNum = 2
var shlnum = operaNum shl(2) var shrnum = operaNum shr(2) var ushrnum = operaNum ushr(2)
println(" shlOperaNum => $shlnum \n" + " shrOperaNum => $shrnum \n" + " ushrOperaNum => $ushrnum \n " )
|
Kotlin
中对于按位操作,和Java是有很大的差别的。Kotlin
中没有特殊的字符,但是只能命名为可以以中缀形式调用的函数,下列是按位操作的完整列表(仅适用于整形(Int
)和长整形(Long
)):
shl(bits)
=> 有符号向左移 (类似Java
的<<
)
shr(bits)
=> 有符号向右移 (类似Java
的>>
)
ushr(bits)
=> 无符号向右移 (类似Java
的>>>
)
and(bits)
=> 位运算符 and
(同Java
中的按位与)
or(bits)
=> 位运算符 or
(同Java
中的按位或)
xor(bits)
=> 位运算符 xor
(同Java
中的按位异或)
inv()
=> 位运算符 按位取反 (同Java
中的按位取反)
- 数组分
arrayOf()
, arrayOfNulls()
, Array()
, 原始类型数组