2019.07.02基本類型部分:沒有人能夠幫你努力,你只有靠本身
Kotlin中var和val的區別:
Kotlin中有兩個關鍵字定義變量,這兩個關鍵字外形看着差異很小就只差了一個字母,但實際差異很大的。
var是一個可變變量,這是一個能夠經過從新分配來更改成另外一個值的變量。這種聲明變量的方式和java中聲明變量的方式同樣。
val是一個只讀變量,這種聲明變量的方式至關於java中的final變量。一個val建立的時候必須初始化,由於之後不能被改變。
在 Kotlin 中,全部東西都是對象,在這個意義上講咱們能夠在任何變量上調用成員函數與屬性。 一些類型能夠有特殊的內部表示——例如,數字、字符以及布爾值能夠在運行時表示爲原生類型值,可是對於用戶來講,它們看起來就像普通的類。 在本節中,咱們會描述 Kotlin 中使用的基本類型:數字、字符、布爾值、數組與字符串。
數字
Kotlin 處理數字在某種程度上接近 Java,可是並不徹底相同。例如,對於數字沒有隱式拓寬轉換(如 Java 中 int 能夠隱式轉換爲long——譯者注),另外有些狀況的字面值略有不一樣。
Kotlin 提供了以下的內置類型來表示數字(與 Java 很相近):
Kotlin 的基本數值類型包括 Byte、Short、Int、Long、Float、Double 等。不一樣於 Java 的是,字符不屬於數值類型,是一個獨立的數據類型。
Type
|
Bit width
|
Double
|
64
|
Float
|
32
|
Long
|
64
|
Int
|
32
|
Short
|
16
|
Byte
|
8
|
fun basicNumberTest(){
//Int類型
var testInt:Int=1
//Long類型(與Int類型的區分看L)
var testLong:Long=123L
//Short類型,表示整型,數值範圍比較小(-32768~32767),所佔字節小
var testShort:Short= Short.MAX_VALUE
//Double類型
var testDouble:Double=12.21
//Float類型(與Double類型的區分看f或者F)
var testFloat:Float=12.12F
//Byte類型,表示整型,數值範圍( -128~127)
var testByte:Byte= Byte.MAX_VALUE
}複製代碼
val lastTime:Int=1_000_000複製代碼
fun basicNumberTest(){
val lastTime:Int=1_000_000
println("-----------------------")
println(lastTime==lastTime)//輸出true
println("-----------------------")
val fristTime:Int?=lastTime
println(fristTime==lastTime)//輸出true
println(fristTime===lastTime)//輸出false
println("-----------------------")
val scondTime:Int?=lastTime
println(fristTime==scondTime)//輸出true
println(fristTime===scondTime)//輸出false
println("-----------------------")
val thirdTime:Int=lastTime
println(lastTime==thirdTime)//輸出true
println(lastTime===thirdTime)//輸出true
}複製代碼
// 假想的代碼,實際上並不能編譯,會提示錯誤
fun basicNumberTest(){
val lastTime:Int?=1_000_000
val fristTime:Long?=lastTime
println(lastTime==fristTime)
}複製代碼
val b: Byte = 1 // OK, 字面值是靜態檢測的
val i: Int = b // 錯誤複製代碼
val i: Int = b.toInt() // OK:顯式拓寬
print(i)複製代碼
val l = 1L + 3 // Long + Int => Long複製代碼
PS:NaN,「not a number」一個不是數的數複製代碼
fun basicFloatTest(){
var num1:Float=10f
if (num1 in 11..14){
println("在11-14之間")
}else{
println("不在11-14之間")
}
}複製代碼
fun basicTest(){
var charStr:Char='a'
println("charStr--${charStr.toInt()}")
}複製代碼
fun basicTest(){
var isShow=true
if(isShow){
println("show")
}else{
println("noshow")
}
}複製代碼
fun basicTest(){
var str="nihao"
for (c in str) {
println(c)
}
}
------------start----------
n
i
h
a
o
------------stop----------複製代碼
fun basicTest(){
var name="wu xian sheng"
var age1=12
var age2=15
println("my name is $name,my age is${age1+age2}")
}複製代碼
Kotlin 有兩種類型的字符串字面值: 轉義字符串能夠有轉義字符,以及原始字符串能夠包含換行以及任意文本。轉義字符串很像 Java 字符串:
fun basicTest(){
var name="my name is wu xian sheng\n"
print(name)
print("ohoh")
print("haha")
}複製代碼
------------start----------
my name is wu xian sheng
ohohhaha------------stop----------複製代碼
fun basicTest(){
var name="my name is wu xian sheng\n"
var message="""my name is wu xian sheng\n"""
print(name)
print(message)
print("haha")
}複製代碼
------------start----------
my name is wu xian sheng
my name is wu xian sheng\nhaha------------stop----------複製代碼
fun basicTest(){
var name=" my name is wu xian sheng\n"
var message=""" <my name is wu xian sheng\n"""
print(name)
print(message.trimMargin("<"))
print("haha")
}複製代碼
------------start----------
my name is wu xian sheng
my name is wu xian sheng\nhaha------------stop----------複製代碼
class Array<T> private constructor() {
val size: Int
operator fun get(index: Int): T
operator fun set(index: Int, value: T): Unit
operator fun iterator(): Iterator<T>
// ……
}複製代碼
咱們可使用庫函數 arrayOf() 來建立一個數組並傳遞元素值給它,這樣 arrayOf(1, 2, 3) 建立了 array [1, 2, 3]。 或者,庫函數 arrayOfNulls() 能夠用於建立一個指定大小的、全部元素都爲空的數組。
另外一個選項是用接受數組大小以及一個函數參數的 Array 構造函數,用做參數的函數可以返回給定索引的每一個元素初始值。
fun basicTest(){
//1.使用arrayOf(), arrayOfNulls(),emptyArray()工具函數。
//2.使用Array(size: Int, init:(Int) -> T)
var array1=arrayOf("ddd",2,"3")
var array2= arrayOfNulls<Int>(2)
//emptyArray() 函數是建立一個長度爲 0 的 null 數組,而後將它強制轉換爲指定類型的數組。
var array3= emptyArray<String>()
var array4=Array(3,{"nihao"+it})
array2.set(0,12)
array2.set(1,24)
array1.forEach {
println(it)
}
array2.forEach {
println(it)
}
array4.forEach {
println(it)
}
}複製代碼
------------start----------
ddd
2
3
12
24
nihao0
nihao1
nihao2
------------stop----------複製代碼
fun basicTest(){
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]
x.forEach {
println(it)
}
}複製代碼
------------start----------
5
2
3
------------stop----------複製代碼