Kotlin语法(三)基本类型
2016-08-06 16:35
866 查看
在Kotlin中,所有东西都是对象。
(与Java很相近):
l 十进制:1
Longs类型用大写 L 标记:1L
l 十六进制:0x01
l 二进制:0b0000 0001
注意:不支持8进制
Ø Doubles
1.2, 1.5e10
Ø Floats
用 f 或者 F 标记:1.3f
装箱数字不会保存它的实例:
Kotlin系统类型分为可空类型和不可空类型,对于Kotlin的数字类型而言:
Ø 不可空类型就类似与Java中的基本数字类型,是原始的数字类型,例如:int,long,float,double等等,
Ø 可空类型就相当于引用的数字类型,例如Integer,Long,Float,Double等等。
在Java中,从基本数字类型到引用数字类型的转换就是典型的装箱操作,例如int转为Integer。同理,在Kotlin中,非空数字类型到可空数组类型需要进行装箱操作。
=:赋值,在逻辑运算时也有效;
==:等于运算,比较的是值,而不是引用;
===:完全等于运算,不仅比较值,而且还比较引用,只有两者一致才为真。
Number类型支持如下的转换
对于按位操作(bitwise operation),没有特别的符号来表示,而是直接使用命名函数.
跟数字类型相同,Char类似与java的基本类型char,Char?类似于Java引用类型Character,从非空类型Char到可空类型Char?的转换需要装箱操作。
可以使用库函数arrayOf ()来创建一个包含数值的数组;或者arrayOfNulls<T>()可以创建一个指定大小,元素都为空的数组;或者使用函数来创建一个数组:
另,Kotlin有专门的类来表示原始类型的数组,避免了装箱开销: ByteArray, ShortArray, IntArray 等等. 这些类和Array并没有继承关系,但是它们有同样的方法属性集. 它们也都有相应的工厂方法:
字符串的原始字符可以使用操作符访问: str[i]. 字符串可以使用for{: .keyword }循环遍历。
1) 转义字符串:可能由转义字符、原生字符串、换行和任意文本;转义字符串很像java的String;转义方式采用传统的反斜杠。
2)原生字符串:使用三个引号(""")包括,内部没有转义,可以包含换行和任何其他文本。
2. Java中非原始类型的内置类型与Kotlin的映射
3. 集合类型的映射
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' |
Ø 不可空类型就类似与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() |
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()}) |
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" |
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. 数组类型的映射
相关文章推荐
- Kotlin 学习笔记(一) 基本类型和基本语法
- Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合
- Kotlin的基本语法和类型
- kotlin基本语法与类型
- 浅谈Kotlin(二):基本类型、基本语法、代码风格
- java语法基本数据类型小结
- JavaScript语法入门系列(三) 基本数据类型及其对应对象类型
- J2SE学习笔记3 — Java基本语法(2)基本数据类型
- J2SE学习笔记3 — Java基本语法(4)类型转换
- LotusScript基本语法知识……变量和数据类型
- C#基本语法 - 基本的数据类型
- Objective-C语法之基本数据类型
- php学习笔记(3):PHP基本语法和数据类型:
- Objective-C语法之基本数据类型
- ruby: 基本数据类型与语法
- Google Dart编程语言学习(1)--语法和基本类型
- PHP的基本语法和数据类型
- oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数
- 【学习笔记】JavaScript——基本语法与数据类型
- 基本语法--基本的数据类型