您的位置:首页 > 其它

Kotlin语法(三)基本类型

2016-08-06 16:35 866 查看
        在Kotlin中,所有东西都是对象。

Numbers

        Kotlin处理numbers和Java很接近,但是并不完全相同.例如, 对于numbers没有隐式扩大转换(如java中int可以隐式变为long),在一些情况下文字的使用有所不同。

1.     Numbers类型

        对于numbers, Kotlin提供了如下的内置类型
(与Java很相近): 

Type       

Bitwidth

Long

64

Int

32

Short

16

Byte

8

Double

64

Float

32  

 

2.     字面量

       下面是一些常量的写法:

       l  十进制:1

           Longs类型用大写 L 标记:1L

      l  十六进制:0x01

      l  二进制:0b0000 0001

     注意:不支持8进制

 

     Ø  Doubles

          1.2, 1.5e10

     Ø  Floats

          用 f 或者 F 标记:1.3f

3.     存储方式

        在Java平台数字是物理存储为JVM的原始类型,除非我们需要一个可空的引用(例如int?)或泛型. 后者情况下数字被装箱(指的是赋值的时候把实例复制了一下,不是相同实例)。

       装箱数字不会保存它的实例:

val a: Int = 100

print(a identityEquals a) // Prints 'true'

val boxedA: Int? = a

val anotherBoxedA: Int? = a

print(boxedA identityEquals anotherBoxedA) // !!!Prints 'false'!!!

//另一方面它们值相等:

val a: Int = 100

print(a == a) // Prints 'true'

val boxedA: Int? = a

val anotherBoxedA: Int? = a

print(boxedA == anotherBoxedA) // Prints 'true'
       Kotlin系统类型分为可空类型和不可空类型,对于Kotlin的数字类型而言:

       Ø  不可空类型就类似与Java中的基本数字类型,是原始的数字类型,例如:int,long,float,double等等,

       Ø  可空类型就相当于引用的数字类型,例如Integer,Long,Float,Double等等。

       在Java中,从基本数字类型到引用数字类型的转换就是典型的装箱操作,例如int转为Integer。同理,在Kotlin中,非空数字类型到可空数组类型需要进行装箱操作。

val a: Int = 1000

val b: Int = 1000

println(a==b)    //true

println(a===b)   //true

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

//

val a: Int? = 1000

val b: Int? = 1000

println(a==b)    //true

println(a===b)   //false
       =:赋值,在逻辑运算时也有效;

       ==:等于运算,比较的是值,而不是引用;

       ===:完全等于运算,不仅比较值,而且还比较引用,只有两者一致才为真。

4.     显式转换

      Kotlin不支持隐式扩大转换,即下面的方式是会编译错误的;转换需要显式处理。

ar a: Byte = 10

var b: Int = a //编译错误

//可以显示转换的去扩大类型

var b: Int = a.toInt()
        Number类型支持如下的转换

toByte(): Byte

toShort(): Short

toInt(): Int

toLong(): Long

toFloat(): Float

toDouble(): Double

toChar(): Char

运算符

         Kotlin支持标准的算数操作符,并在相应的类上定义为成员函数(但编译器会针对运算进行优化,将函数调用优化成直接的算数操作)。

         对于按位操作(bitwise operation),没有特别的符号来表示,而是直接使用命名函数.

val x = (1 shl 2) and 0x000FF000

//已经支持位运算操作 (只能对 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 and 位与

or(bits) – bitwise or 位或

xor(bits) – bitwise xor 位异或

inv() – bitwise inversion 位反转

Characters

        Characters 用 Char来表示;用单引号表示一个Character;可以调用显示转换把Character转换为Int。

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

var charP: Char = 'a'

//

fun decimalDigitValue(c: Char): Int {

  if (c !in '0'..'9')

    throw IllegalArgumentException("Out of range")

  return c.toInt() - '0'.toInt() // Explicit conversions to numbers

}

Booleans

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

数组

        使用 Array类来表示;跟Java的Array类型,它有get、set函数(使用时可以用[],通过符号重载的约定转换)以及其他的有用的成员函数,也有size属性。

       可以使用库函数arrayOf ()来创建一个包含数值的数组;或者arrayOfNulls<T>()可以创建一个指定大小,元素都为空的数组;或者使用函数来创建一个数组:

//可以使用下面方式定义一个数组

var a1: Array<String> = arrayOf("data1", "data2")

var a2 = arrayOfNulls<String>(10)

var a3 = Array(10, {i -> (i + i).toString()})
        另,Kotlin有专门的类来表示原始类型的数组,避免了装箱开销: ByteArray, ShortArray, IntArray 等等. 这些类和Array并没有继承关系,但是它们有同样的方法属性集. 它们也都有相应的工厂方法:

varintA = intArrayOf(0, 1, 2)

字符串

        字符串用String表示。字符串是不可变的。

        字符串的原始字符可以使用操作符访问: str[i]. 字符串可以使用for{: .keyword }循环遍历。

var str: String ="info" 

for(c in str) {

     println(c)

}

1.     字符串字面量

        Kotlin有两种类型的字符串:

       1) 转义字符串:可能由转义字符、原生字符串、换行和任意文本;转义字符串很像java的String;转义方式采用传统的反斜杠。

valstr = "Hello, world!\n"
        2)原生字符串:使用三个引号(""")包括,内部没有转义,可以包含换行和任何其他文本。

val text ="""

for (c in "test info")

    println(c)

   """

2.     模板

         字符串可以包含模板表达式,即一些小段代码,会求值并把结果合并到字符串中。模板表达式以$符号开始,包含一个简单的名称;或者用花括号扩起来,内部可以是任意表达式:

val i = 1

val str = "i =$i" // evaluates to "i = 1"

//

val s ="abc"

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

Java与Kotlin的类型映射

         Java与Kotlin直接是存在互操作性的,也就是说Java中可以调用Kotlin,Kotlin中也可以调用Java。

1.     Java原始类型对应的Kotlin类型



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

3.     集合类型的映射

4.     数组类型的映射



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: