Kotlin的重新學(xué)習(xí)---01簡(jiǎn)單的特性

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代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容