Kotlin学习笔记——基本类型

来源:互联网 发布:怎样使用淘宝优惠券 编辑:程序博客网 时间:2024/05/16 11:16

数字类型

和Java一样,Kotlin提供了一些内置类型作为它的数字类型。

这里写图片描述

在Java平台上,数字都是以JVM的的原始类型存储的,除非我们所需要的是一个可空的数字引用或者是泛型,它就会引起数字的装箱操作。什么意思呢?因为Kotlin系统类型分为可空类型和不可空类型,对于Kotlin的数字类型而言,不可空类型就类似与Java中的基本数字类型,是原始的数字类型,例如:int,long,float,double等等,可空类型就相当于引用的数字类型,例如Integer,Long,Float,Double等等。在Java中,从基本数字类型到引用数字类型的转换就是典型的装箱操作,例如int转为Integer。同理,在Kotlin中,非空数字类型到可空数组类型需要进行装箱操作。

al a: Int = 1000val b: Int = 1000println(a==b)    //trueprintln(a===b)   //true

上面返回的都是true,因为a,b它们都是以原始类型存储的,类似于Java中的基本数字类型。

val a: Int? = 1000val b: Int? = 1000println(a==b)    //trueprintln(a===b)   //false

首先要说说”==”与”===”,在JavaScript中,===表示“恒等于”,==表示“等于”,=表示“赋值”。这里跟JavaScript有些一样的.

=:赋值,在逻辑运算时也有效;
==:等于运算,比较的是值,而不是引用;
===:完全等于运算,不仅比较值,而且还比较引用,只有两者一致才为真。

上面a和b都进行了装箱操作,所以a和b对应的是不同的引用,但是它们引用的值是相同的。下面这个例子也是同理。

val a: Int = 10000val boxedA: Int? = aval anotherBoxedA: Int? = aprint(boxedA == anotherBoxedA) // Prints 'true'println(boxedA === anotherBoxedA) // Prints 'false'

小类型不能一隐式的转换为大类型的数据

val b: Byte = 1 // OK, literals are checked staticallyval i: Int = b // ERROR

上面会显示语法错误,需要进行显示的转换。

val b: Byte = 1val i: Int = b.toInt()  // OK: explicitly widened

每个数字类型都有下面的类型转换函数:

toByte(): BytetoShort(): ShorttoInt(): InttoLong(): LongtoFloat(): FloattoDouble(): DoubletoChar(): Char

运算的过程中其实会有隐式的类型转换

val l = 1L + 3 // Long + Int => Long

二进制运算

Int和Long的完整二进制运算

shl(bits)signed shift left (Java’s <<)shr(bits)signed shift right (Java’s >>)ushr(bits)unsigned shift right (Java’s >>>)and(bits)bitwise andor(bits)bitwise orxor(bits)bitwise xorinv()bitwise inversion

Characters类型

Characters代表的就是Char类型,不能直接的当做数字进行运算。

fun check(c: Char) {  if (c == 1) { // ERROR: incompatible types    // ...  }}

特殊的转义字符使用反斜杠:\t, \b, \n, \r, \’, \”, \ 和 $

下面是字符到数字的转换

fun decimalDigitValue(c: Char): Int {  if (c !in '0'..'9')    throw IllegalArgumentException("Out of range")  return c.toInt() - '0'.toInt() // Explicit conversions to numbers}

跟数字类型相同,Char类似与java的基本类型char,Char?类似于Java引用类型Character,从非空类型Char到可空类型Char?的转换需要装箱操作。

Booleans类型

跟java一样,Boolean类型有两种值:true 和 false。支持”||”,”&&”,”!”三种运算。

Arrays类型

跟Java的Array类型,它有get、set函数以及其他的有用的成员函数,也有size属性。

class Array<T> private constructor() {  val size: Int  fun get(index: Int): T  fun set(index: Int, value: T): Unit  fun iterator(): Iterator<T>  // ...}

直接使用arrayOf(1, 2, 3)可创建数组[1, 2, 3]

另外可以直接创建一个Array对象,在Kotlin中,创建对象不需要使用new关键字。

val asc = Array(5, { i -> (i * i).toString() })

确定类型数组

ByteArray, ShortArray, IntArray等等,它们跟Array没有继承关系,属于同一个系列,都有相同的方法和属性集。

val x: IntArray = intArrayOf(1, 2, 3)x[0] = x[1] + x[2]

Strings类型

类似于Java中的String类型,它是不可变对象,字符串的每个元素都是字符,可以使用索引访问:s[i]。可以使用for循环进行遍历。

for (c in str) {  println(c)}

字符串类型:包含转义字符的转义字符串和包含有多行任意文本的原生字符串。

转义字符串

val s = "Hello, world!\n"

原生字符串

val text = """  for (c in "foo")    print(c)"""

字符串模板

需要将某个变量的值作为字符串的一部分,在该变量前加上$字符放入字符串即可。

val i = 10val s = "i = $i" // evaluates to "i = 10"

也可以加上中括号

val s = "abc"val str = "$s.length is ${s.length}" // evaluates to "abc.length is 3"

上面两种类型的字符串都支持字符串模板的表示

val price = """${'$'}9.99"""

Java与Kotlin的类型映射

Java与Kotlin直接是存在互操作性的,也就是说Java中可以调用Kotlin,Kotlin中也可以调用Java,所以在学习Kotlin的时候,我们可以将它们对比来看,特别是类型,它们之间是存在映射关系的,这进一步方便我们了解Kotlin的类型。

Java原始类型对应的Kotlin类型

这里写图片描述

Java中非原始类型的内置类型与Kotlin的映射

这里写图片描述

集合类型的映射

这里写图片描述

数组类型的映射

这里写图片描述

参考文章:Basic Types

==================================

附上一点Kotlin学习资源:Kotlin学习资源

0 0
原创粉丝点击