numbers類型: 數字類型的數據有Byte,Short,Float,Int,Long,Double,這些類型在java中也都是基礎數據類型。 與java不同之處在於: Char類型已經不再是數字類型了。 在java之中基礎數據類型都對應有一個包裝類,如int,對應Integer,而在kotlin ...
numbers類型:
數字類型的數據有Byte,Short,Float,Int,Long,Double,這些類型在java中也都是基礎數據類型。
與java不同之處在於:
- Char類型已經不再是數字類型了。
- 在java之中基礎數據類型都對應有一個包裝類,如int,對應Integer,而在kotlin中基礎數據類型已經是類類型的了。
- 不同類型的數字之間不能自動轉換,需要明確調用相應的方法。有一系列的轉換方法,toShort,toByte,toInt……想轉成什麼類型,就調用對應的toXX()方法即可
- 支持二進位(0b1111),十進位(123456),十六進位(0xFFFF00),但是不支持八進位。
- 數字之間允許用下劃線分割,更方便閱讀
- 位運算符不在是>>,<<,>>>,<<<,&,!,~,|,Kotlin中用的是一個叫做中綴表達式的玩意兒
var a: Int = 100 var b: Short = 10 a = b//error require Int,found Short a = b.toInt()
//數字之間可以添加下劃線,方便閱讀
var c: Int = 1000_1000_1000
var d: Int = 0b11111_1111
var e: Int = 0xFF_FF_FF_FF
var f: Char = 1//error Char類型必須以''包起來
var g: Char = 'a'
//位運算
tempValue1 shl 2 //<<2
tempValue1 shr 2//>>2
tempValue1 ushr 2//>>>2 我相信沒有有人會好奇咋沒有<<<2吧?如果你好奇了,我也不會告訴你為啥
tempValue1 and tempValue2// tempValue1 & tempValue2
tempValue1 or tempValue2// tempValue1 |tempValue2
tempValue1 xor tempValue2// tempValue1 ^ tempValue2
tempValue1.inv()// ~tempValue1
與java相同之處在於:
- 依舊沒有原生提供unsigned無符號數據類型。
- 數據類型長度是一樣的,Char(8),Short(16),Int(32),Float(32),Long(64),Double(64)
- 雖然Kotlin中數字類型是類類型,但是申明數字類型變數依舊和java類似:val a: Int = 1,var b:Short = 1,Float類型變數後面要加f/F,Long類型後面只能加L,小l會編譯不通過
那麼在Kotlin中是怎麼把有符號轉成無符號的數據類型的呢,方法如下(Java中也是一樣的):
fun getUnsignedByte(value: Byte): Int { return value.toInt() and 0xFF } fun getUnsignedShort(value: Short):Int{ return value.toInt() and 0xFFFF } fun getUnsignedInt(value: Int): Long{ return value.toLong() and 0xFFFFFFFF }
上面分別是將有符號Byte,Short,Int轉成對應的無符號數據,so,不要再噴Kotlin和Java的數據類型不完整啦,沒有無符號類型啦,巧妙運用位運算,有符號轉無符號,so easy!
(寫到這個so easy,就想起最近隔壁組的項目經理老提起步步高點讀機那個廣告中的小姑娘高考考的分數很低的梗)
Char類型
為什麼要單獨說一下這個Char類型,上面已經提到過,在Kotlin中Char已經不再是數字類型
fun check(c: Char) { if( c == 1){ //error: Operator '==' cannot be applied to 'Char' and 'Int' } }
//正確申明char變數的姿勢:
var char1: Char = 'a'
//咋把Char轉成Int呀?上面說咯,toInt即可
var a: Int = 'a'.toInt()
Bool類型
就2個只true,false
&&,||,!運算規則和Java相同
Array類型
數組的申明在Kotlin中是迥異於Java的,數組現在變成了一個泛型類。這意味著只能放同類型對象了。對數組調用下表運算符[]其實是利用了運算符重載的特性
var tempArray2: Array<Int> = Array(5, { i -> i * i })//利用數組的構造函數 var tempArray: Array<Int> = arrayOf(1, 2, 3)//利用庫函數申明一個函數 var tempArray1: Array<Int?> = kotlin.arrayOfNulls<Int>(100)//申明100個元素的空數組 var tempArray5: Array<Long> = tempArray//error 不能相互轉換
Kotlin庫還提供了一些對於特定類型數據的Array類,如ByteArray,ShortArray,IntArray等等。
String類型
var str1: String = "Hello,Kotlin"//單行字元串 var multiStr:String = """ 啦啦啦啦 啦啦啦 嘿嘿嘿 """//多行字元串
string類型最大的不同就在於模板字元串咯
var id: Int = 1 var name: String = "liuliqianxiao" var result: String = "the id is $id and the name is $name"//還記得在java中怎麼拼字元串嗎 var result1: String = "the name`s length is ${name.length}"//可以在${}的大括弧中寫入表達式
是不是感覺模板字元串很好用呢?
好吧,這篇Kotlin中基礎類型就簡單寫到這裡咯,這裡對比了一些Java,有可能寫的不對,也有可能新時代的java已經不是我描述的醬紫了。錯誤之處依舊請不留情面的指出來。