看一下Kotlin的基本类型
作为一种编程语言,多少也要有自己的基本数据类型,Kotlin也设有Double(64)、Float(32)、Long(64)、Int(32)、Short(16)、Byte(8)这几个,和Java对比一下,包括位数都都相差不大,不知道大家注意没有,在kotlin不过char不是基本类型。这些东西应该怎么用呢?也就是说在kotlin这个万物皆对象的世界中怎么声明一个变量,接触过弱语言的同学应该知道一个var,kotlin还有一个val。var 和 val 就的区别就是在一个可变,一个不可变,简单来说就是相当于val就相当于加了一个final。kotlin1.1版本后可以直接这么声明(var 同理):
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
在Java平台,我们定义一个变量的时候需要给一个为空,举个例子:
var tv_first: TextView //这肯定报错
var tv_first: TextView = null //也是错误
var tv_first: TextView = null!! //指定为NULL了,编译通过了,APP崩了
kotlin中给一个可以为null的一个方式(TextView?)
var tv_first: TextView? = null
类型转换
简单提一点小类型不能转成大的类型,就拿Int和Double举一个例子
val a: Int = 100
val b: Double = a//ERROR
幸好 它里面有一个方法提供转换,想的很周到,每一个都含有
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
val b: Double = a.toDouble()//SUCCESS
说到这还有一个相加的时候的一个转换,看一下例子,规则和Java差不多
val l = 1L + 3 // Long + Int => Long
运算符
shl(bits) – 左移 ( 相当于Java<<)
shr(bits) –右移 ( 相当于Java>>)
ushr(bits) – 无符号右移,忽略符号位 (相当于Java >>>)
and(bits)
or(bits)
xor(bits) – 异或
inv() – 取反
这地方啰嗦两句,简单说 左移 也就是乘以2的几次方 , 右移就是除2几位。这个东西换成2机制就好理解
Java :
int number = 1;
System.out.print(number<<2);//输出为4
System.out.print(number<<3);//输出为8
int number_t = 3
System.out.print(number>>1);//输出1
System.out.print(number>>2);//输出0
1 存储为 00000001 左移两位 00000100 二进制 转为十进制也就是4
同理 3 存储 00000011 右移1位 00000001 输出1
字节
字节同样的Char的类型,但是还是像开头说的没有成为基本类型,很神奇。
fun check(c: Char) {
if (c == 1) { // ERROR
// ...
}
}
说一个正确例子,转一个到Int类型
fun decimalDigitValue(c: Char): Int {
if (c !in '0'..'9')
throw IllegalArgumentException("Out of range")
return c.toInt() - '0'.toInt() // Explicit conversions to numbers
}
Boolean
Boolean 同样也不是基本类型,true和false 两个值
||
&& (这三个东西就不用说了)
!
Array是一个类
这是个很NB的东西,很强大,怎么玩?看例子 就是ArrayOf
var x: IntArray = intArrayOf(1,2,3);
var k: DoubleArray = doubleArrayOf(1.2,1.3,1.0)
同样你还能这么实例:
// Creates an Array<String> with values ["0", "1", "4", "9", "16"]
val asc = Array(5, { i -> (i * i).toString() })
很厉害吧,再看一下这个Array类支持泛型:
class Array<T> private constructor() {
val size: Int
operator fun get(index: Int): T
operator fun set(index: Int, value: T): Unit
operator fun iterator(): Iterator<T>
// ...
}
String
String 在Kotlin 中有两种实现:
一种就是和Java一样:
val s = "Hello, world!\n"
另外一种就是要用(”“”)这个东西
val text = """
for (c in "foo")
print(c)
"""
/** 打印出来就是
for (c in "foo")
print(c)
**/
trimMargin() 看例子
val text = """
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
|(Benjamin Franklin)
""".trimMargin()
/**
输出
Tell me and I forget.
Teach me and I remember.
Involve me and I learn.
(Benjamin Franklin)**/
val text = """
|Tell me and I forget.
|Teach me and I remember.
>Involve me and I learn.
>(Benjamin Franklin)
""".trimMargin(">")
/**
输出
|Tell me and I forget.
|Teach me and I remember.
Involve me and I learn.
(Benjamin Franklin)
**/
还有一个”$”的用法
val i = 10
val s = "i = $i" // "i = 10"
val s = "abc"
val str = "$s.length is ${s.length}" // "abc.length is 3"
看到这如果我单独就是打印”$”字符怎么办?比如说9.99美元
val price = """
${'$'}9.99
"""