Android Kotlin第三篇,這篇我們一起來了解下Kotlin基礎(chǔ)類型與集合,也許我有的地方?jīng)]有寫好型宙,也歡迎大家提出問題,糾正問題
一伦吠、數(shù)字類型
Kotlin對(duì)數(shù)字處理與java差不多妆兑,Kotlin支持?jǐn)?shù)字類型如下:
val doubles : Double = 123.5e10 //Double,64
val floats : Float = 1.0f //Float,32
val longs : Long = 1L //Long,64
val ints : Int = 1 //Int,32
val shorts : Short = 1 //Short,16
val bytes : Byte = 1 //Byte,8
Kotlin支持十進(jìn)制魂拦、十六進(jìn)制以及二進(jìn)制,目前還不支持八進(jìn)制
val tenType : Int = 10 //支持十進(jìn)制搁嗓,默認(rèn)是十進(jìn)制
val sixteenType : Byte = 0x22 //支持十六進(jìn)制,0x開頭標(biāo)示十六進(jìn)制
val twoType : Int = 0b00000010 //支持二進(jìn)制,0b開頭表示二進(jìn)制
與java不同之處:
1芯勘、數(shù)字類型支持字面值中的下劃線,這樣讓長(zhǎng)數(shù)字常量更已讀腺逛,例如:
val ints1 = 1_001_000
val longs2 = 1234_5678_9012_3456L
val hexBytes = 0xFF_EC_DE_5E
val bytew = 0b11010010_01101001_10010100_10010010
2荷愕、Kotlin數(shù)據(jù)類型轉(zhuǎn)化與java不同
val a: Int? = 1
// val b: Long? = a//這樣隱式轉(zhuǎn)換有問題,不能編譯
// val c: Long? = (Long)a//像java一樣強(qiáng)轉(zhuǎn)也不行棍矛,不能編譯
Kotlin提供了更加強(qiáng)大的轉(zhuǎn)化功能
每個(gè)數(shù)字類型都支持一下的轉(zhuǎn)化:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
val d: Long? = a?.toLong()
//算術(shù)運(yùn)算會(huì)有重載做適當(dāng)轉(zhuǎn)換
val l = 1L + 3 // Long + Int => Long
當(dāng)然接下來的其他類型大部分也都支持以上轉(zhuǎn)化安疗,例如:字符等
3、位運(yùn)算
// 這是完整的位運(yùn)算列表(只用于 Int 和 Long):
// shl(bits) – 有符號(hào)左移 (Java 的 <<)
// shr(bits) – 有符號(hào)右移 (Java 的 >>)
// ushr(bits) – 無符號(hào)右移 (Java 的 >>>)
// and(bits) – 位與
// or(bits) – 位或
// xor(bits) – 位異或
// inv() – 位非
val x = (1 shl 2) and 0x000FF000
二够委、字符類型(Char)
字符類型,單引號(hào)括起來且只能一個(gè)字符茂契。
特殊字符可以用反斜杠轉(zhuǎn)義。 支持這幾個(gè)轉(zhuǎn)義序列:\t慨绳、 \b、\n真竖、\r脐雪、'、"恢共、\ 和 $
val char1 : Char = 'a'
val char2 : Char = '1'
val cInt : Int = char2.toInt()//字符類型轉(zhuǎn)Int
//字符類型轉(zhuǎn)Int方法
fun CharToInt(c: Char): Int {
if (c !in '0'..'9')
throw IllegalArgumentException("Out of range")
return c.toInt() - '0'.toInt() // 顯式轉(zhuǎn)換為數(shù)字
}
三战秋、布爾類型()
與java差不多,唯一區(qū)別就是讨韭,Kotlin不只是true或false,還支持null脂信,例如:
val bool1 : Boolean = true
val bool2 : Boolean? = null//加上?就可以對(duì)布爾類型賦值null
fun test4() : String{
return bool2.toString()//就算調(diào)用null透硝,輸出打印狰闪,也不會(huì)報(bào)錯(cuò),這就是Kotlin空安全強(qiáng)大之處
}
四濒生、集合埋泵、數(shù)組類型
與大多數(shù)語(yǔ)言不同,Kotlin 區(qū)分可變集合和不可變集合(lists罪治、sets丽声、maps 等)。精確控制什么時(shí)候集合可編輯有助于消除 bug 和設(shè)計(jì)良好的 API觉义。
Kotlin 的 List<out T> 類型是一個(gè)提供只讀操作如 size雁社、get等的接口。和 Java 類似晒骇,它繼承自 Collection<T> 進(jìn)而繼承自 Iterable<T>霉撵。
改變 list 的方法是由 MutableList<T> 加入的磺浙。
這一模式同樣適用于 Set<out T>/MutableSet<T> 及 Map<K, out V>/MutableMap<K, V>。
val numbers: MutableList<Int> = mutableListOf(1, 2, 3)
val OnlyReadList: List<Int> = numbers
fun test5() : String{
// readOnlyView.clear() // -> 不能編譯
// return numbers.toString() // 輸出 "[1, 2, 3]"
numbers.add(4)
return OnlyReadList.toString() // 輸出 "[1, 2, 3, 4]"
}
1喊巍、Arrays
Kotlin 標(biāo)準(zhǔn)庫(kù)提供了arrayOf()創(chuàng)建數(shù)組屠缭, **ArrayOf創(chuàng)建特定類型數(shù)組
val array = arrayOf(1,2,3)
//和Java不一樣,Kotlin 的數(shù)組是容器類
// 提供了 ByteArray, CharArray, ShortArray, IntArray, LongArray, BooleanArray, FloatArray, and DoubleArray崭参。
val intArray = intArrayOf(1,2)
public inline constructor(size: Int, init: (Int) -> T)
創(chuàng)建一個(gè)具有指定[size]的新數(shù)組呵曹,其中每個(gè)元素通過調(diào)用指定的值來計(jì)算。函數(shù)的作用是:返回給定索引的數(shù)組元素何暮。例如:
val array1 = Array(10, { k -> k * k })//這里k代表元素的索引位置
// return array1.get(2).toString()//輸出4奄喂,因?yàn)樗饕?,輸出:k*k = 2*2 = 4
val array2 = Array(10,{k -> "位置:"+(k+1) })
// return array2.get(5).toString() //輸出"位置:6"海洼,因?yàn)樗饕?跨新,輸出:"位置:"+(k+1) = "位置:"+(6+1) = 位置:6
val emptyArray = emptyArray<Long>()
當(dāng)然你也創(chuàng)建對(duì)象數(shù)組
class Student(val name : String?){
}
//當(dāng)然你也創(chuàng)建對(duì)象數(shù)組
val studentArray = Array<Student>(10,{k -> Student("學(xué)生編號(hào):"+k)})
// return studentArray.get(6).name.toString()
studentArray[6] = Student("張三")
return studentArray.get(6).name.toString()
2、Lists
List是有序容器坏逢,Kotlin 標(biāo)準(zhǔn)庫(kù)通過listOf()創(chuàng)建list
你可以這樣申明
val list1 = listOf<Int>()
當(dāng)然也可以這樣域帐,list1與list2意思一樣
val list2 : List<Int> = listOf(1,2,3,4,5,6)
當(dāng)然你也可以付初始默認(rèn)值,也可以不指定類型
val list3 = listOf(1,2,"3")
如果你想對(duì)list2進(jìn)行添加或者修改時(shí)是整,就不行了肖揣,因?yàn)長(zhǎng)ist<T>只能讀,這時(shí)候你需要聲明個(gè)可以操作的屬性
val list4 : MutableList<Any> = list3.toMutableList()//這里將List轉(zhuǎn)換出可以編輯的
list4.add("4")
// list4.set(0,10)
// return list4.toString()//輸出:[1, 2, 3, 4]
// return list3.toString()//輸出:[1, 2, 3]
對(duì)list4操作不會(huì)影響list3浮入,list4相當(dāng)于復(fù)制出來的
// return (list4.first() == 1).toString()//當(dāng)然也有l(wèi)ist4.last()
當(dāng)然也可以按一定條件篩選
// return list2.filter { (it % 2) == 0 }.toString()
val list5 : MutableList<Int> = mutableListOf(1,2,3,4)
val list6 : List<Int> = list5
list5.add(5)
// return list5.toString()//輸出:[1, 2, 3, 4, 5]
return list6.toString()//輸出:[1, 2, 3, 4, 5]
val emptyList: List<String> = emptyList<String>()
val nonNulls: List<String> = listOfNotNull<String>(null, "a", "b", "c")
3龙优、Maps
Map是<key, value>容器, Kotlin提供mapOf創(chuàng)建map
fun test8() : String{
val map1 = mapOf("a" to 1, "b" to 2, "c" to 3)
// return map1.toString()
val map2 = hashMapOf("a" to 1, "b" to 2, "c" to 3)
// return map2.toString()
val map3 : MutableMap<String, String> = mutableMapOf("a" to "a", "b" to "b", "c" to "c")
// return map3.toString()
val map4 : LinkedHashMap<String, String> = linkedMapOf("a" to "a", "b" to "b", "c" to "c")
// return map4.toString()
val map5 : SortedMap<String, String> = sortedMapOf("a" to "a", "b" to "b", "c" to "c")
return map5.toString()
return ""
}
4事秀、Sets
Set是沒有重復(fù)項(xiàng)的容器彤断, Kotlin提供setOf創(chuàng)建Set
fun test9() : String{
val set1: Set<Int> = setOf(1,2,3,3,4) //1,2,3,4
// return set1.toString()
val set2: HashSet<String> = hashSetOf("1","2","3","3")//3,2,1
// return set2.toString()
val set3: SortedSet<Int> = sortedSetOf(11, 0, 9, 11, 9, 8)//0,8,9,11
return set3.toString()
return ""
}
五、字符串類型
支持這幾個(gè)轉(zhuǎn)義序列:\t易迹、 \b宰衙、\n、\r睹欲、'菩浙、"、\ 和 $
val string1 : String = "1"
val string2 = "Hello, world!\n"
字符串模板表達(dá)式
字符串可以包含模板表達(dá)式 句伶,即一些小段代碼劲蜻,會(huì)求值并把結(jié)果合并到字符串中。 模板表達(dá)式以美元符($)開頭考余,由一個(gè)簡(jiǎn)單的名字構(gòu)成:
val string3 = "a = $string1"
// return string3
val string4 = "$string3.length is ${string3.length}"
return string4 //輸出a = 1.length is 5
``
到此先嬉,基本類型就介紹完了,謝謝大家的觀賞楚堤。最近更新速度有點(diǎn)慢疫蔓,給自己加油含懊,加快速度更新
[源碼下載](https://github.com/xiaoqiang008/AndroidKotlin)這里源碼會(huì)隨著后面發(fā)布的Kotlin逐漸完善