基本类型
在kotlin中,所有的东西都是对象(没有类似于java的基本数据类型),因此可以在任何变量上调用成员函数或者属性.
1.数字
与java不同的是,对于数字没有隐式拓宽转换(在java中int可以隐式的转换为long)
提供了六种内置的类型:Double,Float,Long,Int,Short,Byte (不包括Char类型)
2.字面常量
十进制:123
Long类型用大写的L标记:123L
十六进制:0x0F
二进制:0b0001101
不支持8进制
支持浮点数的常规表示方法:
默认:Double 123.5 科学计数法
Float用f或者F标记:123.5f
3.表示方式
数值相同的两个数字 具有相等性,但不具备同一性
4.显式转换
每个数字类型都支持如下的转换:
toByte():Byte toShort(): Short toInt(): Int toLong(): Long toFloat(): Float
toDouble(): Double toChar(): Char
备注:在运算的时候 小类型会遵从大类型进行运算
5.运算
运算同样被定义为了类成员(但编译器会将函数调用优化为相应的指令)
// sh1 有符号左移 java的<<
// shr 有符号右移 java的>>
// ushr 无符号右移 java的>>>
// 别问我为啥没有ushl 无符号左移和shl没区别...
// and 位与
// or 位或
// xor 位异或
// inv 位非
6.字符
字符用Char类型来表示,但是不能直接当做是数字,字面值用单引号括起来,特殊字符用反斜杠转义\ : \t \b \n \r \’ \” \\ \$
可以显示的把字符转换为Int数字(借用’0’.toInt())
7.布尔
和java一样
8.数组
数组在Kotlin中使用Array类来表示,定义了get和set函数(按照运算符重载约定会转变为[])和size属性,迭代器
可以使用库函数arrayOf()来创建一个数组并传递元素值arrayOf(1,2,3)或者库函数arrayOfNulls()可以创建一个指定大小,元素都为空的数组
或者可以通过工厂函数来给索引的每个元素初始值
// 创建⼀. Array<String> 初始化为["0", "1", "4", "9", "16"]
val asc = Array(5, { i -> (i * i).toString() })
与java不同的是,kotlin中数组是不型变的(invariant),意味着kotlin不让我们把Array<String>赋值给Array<Any>.以防止可能的运行时失败
Kotlin也有无装箱开销的专门的类来表示原声类型数组:ByteArray,IntArray等等,这些类和Array并没有继承关系,但是它们又同样的方法属性集,也都有相应的工厂方法
9.字符串
Kotlin有两种类型的字符串字面值:转移字符串可以有转义字符,以及原声字符串可以包含换行和任意文本,转义字符很想java字符串
val s = “hello \n”
原生字符串使用三个引号””” 分界符括起来,内部没有转义并且可以在包含换行和任何其他字符
val text = “””sadfs”sdf”sdf “””
可以通过trimMargin()函数去除前导空格
默认使用|用作边界前缀
字符串可以包含模板表达式
val i = 10
val s = "i = $i" // 求值.果为"i = 10"
或者用花括号括起来的任意表达式
val s = "abc"
val str = "$s.length is ${s.length}" // 求值结果为 "abc.length is 3"
原生字符串和转义字符串内部都支持模板。如果你需要在原⽣字符串中表示字面值$字符(它不支持反斜杠转义),你可以用以下列语法:
val price = """
${'$'}9.99
"""
包
源文件通常以包声明开头:
package com.bubblelab.kotlindemo
fun demo(){}
class Demo{}
源文件所有的内容(类,函数)都包含在声明的包内,如果没有指明包,该文件的内容属于无名字的默认包
1.默认导入
有多个包会默认导入到每个Kotlin文件中:
Kotlin.* 包含kotlin核心的类和函数以及属性
Kotlin.annotation.* 注解包
Kotlin.comparisons.* 包含有很多可以用于产生Comparator比较器的函数
Kotlin.io.* io
Kotlin.ranges.* 核心的拓展功能
Kotlin.sequences.* 对象之间的逻辑处理
Kotlin.text.* 正则表达式,可变字符串等东西
根据平台的不同还会导入额外的包
Jvm: java.lang.* kotlin.jvm.*
2.导入
同java类似
3.没有import static 静态导入没有