1. Kotlin的基本類(lèi)型
1.1 初步認(rèn)識(shí)
舉例
Java:
int a=2;
final String b ="Hello Java";
Kotlin:
var a:Int = 2;
val b:String = "Hello Java"
總結(jié):
- Kotlin 沒(méi)有基本數(shù)據(jù)類(lèi)型,所有皆對(duì)象;
- Kotlin 聲明之后.并且引入var 和val 對(duì)應(yīng) 可變/不可變 類(lèi)型;
- 不需要使用分號(hào)
; -
:類(lèi)型不是必要的,可以類(lèi)型推導(dǎo),如:
var a = 2;
val b = "Hello Java"
1.1 特別的注意
1.1.2 舉例
Java :
long c= 123l;
long d = 321L;
Kotlin :
val c = 123L
總結(jié): Kotlin 只能夠使用大寫(xiě)
L,這樣更清晰
1.1.3 舉例
Java: 可行
int e=10;
long f = e;
Kotlin:
val e:Int =10;
val f:Long=e; // 不可行
val f:Long= e.toLong();// 正確方式
總結(jié): Kotlin 不允許直接轉(zhuǎn)化類(lèi)型(哪怕是Int 變成Long),這樣更加嚴(yán)謹(jǐn)
1.1.4 舉例
| 符號(hào)類(lèi)型 | 無(wú)符號(hào)類(lèi)型 | |
|---|---|---|
| 字節(jié) | Byte | UByte |
| 短整型 | Short | UShort |
| 整型 | Int | UInt |
| 長(zhǎng)整型 | Long | ULong |
因?yàn)镵otlin 可以與C++ 公用,所以增加了無(wú)符號(hào)的特性
2. 字符串
舉例:字符串的模板"""
val j = "小明"
print("My Name is ${j}")
總結(jié): 使用
{} 可以做字符串的的占位符
舉例:字符串的三個(gè)"""
// Raw String: 未經(jīng)加工的String
val n ="""
大笨象
____-
"""
總結(jié): 使用 三個(gè)
"可以輸出代用空格和換行的字符串
舉例:字符串的比較
java:
a==b
a.equals(b)
kotlin
a===b
a==b
總結(jié):
===比較地址,==相當(dāng)于equals. 輔助記憶: 等號(hào)越多相對(duì)更嚴(yán)格. 所以===是一模一樣的東西
4. kotlin的數(shù)組
| Kt | Java | |
|---|---|---|
| 整型 | IntArray | int[] |
| 整型裝箱 | Array<Int> | Integer[] |
| 字符 | ChatArray | char[] |
| 字符裝箱 | Array<Char> | Character[] |
| 字符串 | Array<String> | String[] |
XXArray: 某某數(shù)組, Array<T> 裝箱類(lèi)型的數(shù)組
舉例: 數(shù)組的創(chuàng)建
Java
int[] arr= new int[]{1,2,3}
Kt
val c0 = intArrayOf(1,2,3)
val c1=IntArray(3){ it +1}
Tip: 數(shù)組的打印
val c0 = intArrayOf(1, 2, 3, 4, 5)
val c1 = IntArray(5) {
it + 1
}
println(c0.contentToString())
println(c1.contentToString())
舉例:數(shù)組的讀寫(xiě)
//Java
String[] d= new String[]{"A","B"};
d[1]="Java";
print(d[0]+","+d[1]);
//Kt
// 注: 這里的類(lèi)型 Array<String>
val d = arrayOf("Hello", "Java")
d[1] = "Kt"
print("${d[0]},${d[1]}")
舉例:數(shù)組的遍歷
val e = floatArrayOf(1f, 2f, 3f, 4f)
val e2 = FloatArray(4) {
it + 1f
}
for (element in e2) {
print("$element")
}
e.forEach {
print("${it}")
}
if (e.asList().contains(1f)) {
print("1f exists in variable 'e' ")
}
for (i in e.indices) {
print("${e[i]}")
}
舉例:區(qū)間的創(chuàng)建
// 閉區(qū)間
val intRange = 1..10
val charRange = 'a'..'z'
val longRang = 1L..100L
// 開(kāi)區(qū)間
val intRangeExclude = 1 until 10
val charRangeExclude = 'a' until 'z'
val longRangeExclude = 1L until 100L
val intRangeReverse = 10 downTo 1 step 2
val charRangeRevese = 'z' downTo 'a'
// 遍歷的使用
val IntArr = intArrayOf(1, 2, 3)
for (item in 0..IntArr.size) {
}
3. kotlin的集合框架的接口類(lèi)型
| Kotlin | java | |
|---|---|---|
| 不可變List | List<T> | List |
| 可變List | MutableList<T> | List |
| 不可變Map | Map<K,V> | Map |
| 可變Map | MutableMap<K,V> | Map |
| 不可變Set | Set<T> | Set |
| 可變Set | MutableSet<T> | Set |
總結(jié) : Kt 將常用的集合分為 不可變 和可變(MutableXXX)
val list = listOf<Int>(1, 2, 3)
val list2= mutableListOf<Int>(1,2,3)
// 注: 這里的to 中綴表達(dá)式 infix ; Any 等價(jià)于Object
val map1 = mapOf<String, Any>("k" to "benny", "age" to 20)
val map2 = mutableMapOf<String, Any>("k" to "benny", "age" to 20)
集合框架的創(chuàng)建
val stringList = ArrayList<String>()
他是怎么做到的呢? 為啥能直接創(chuàng)建ArrayList()的呢?
答:類(lèi)型別名; 其實(shí)就是Java 的類(lèi),起了一個(gè)Kotlin的別名
typealias ArrayList<E> = java.util.ArrayList<E>
typealias LinkedHashMap<K, V> = java.util.LinkedHashMap<K, V>
typealias HashMap<K, V> = java.util.HashMap<K, V>
typealias LinkedHashSet<E> = java.util.LinkedHashSet<E>
typealias HashSet<E> = java.util.HashSet<E>
集合框架的CRUD
val stringList: MutableList<String> = mutableListOf();
// 增加
for (i in 0..10) {
stringList.add("2")
stringList += "1"
}
// 讀取
for (i in 0..10) {
stringList.get(i)
stringList[i]
}
//刪除
for (i in 0..10) {
stringList.remove("2")
stringList -= "1"
}
//迭代器遍歷
val iterator = stringList.iterator()
while (iterator.hasNext()) {
val next = iterator.next()
if (next == "2") {
iterator.remove()
}
}
// 包含關(guān)系
if (stringList.contains("2")) {
}
if ("2" in stringList) {
}
// Map的使用
val map = mutableMapOf<String, Int>()
map.put("World", 20)
map["hello"] = 10
map.get("Hello")
map["World"]
// Pair的使用
// 這里是中綴表達(dá)式
val pair = "Hello" to "Kotlin"
val pair2 = Pair("k", "v");
val first = pair.first
val second = pair.second
// 這個(gè)是解構(gòu), 內(nèi)部是component
val (x, y) = pair
kotlin的提示Tips
快捷鍵
Alt + Enter - 最常用的快捷提示
Ctrl + Shift + P - Type Info 查看當(dāng)前的類(lèi)型
雙擊Shift - 搜索
show Kotlin ByteCode
'雙擊Shift'--> 輸入show Kotlin ByteCode-->點(diǎn)擊Decompile:
可以看到Kotlin編譯成的Java代碼