一,数据类型.
1.数字类型Number。
- Float(32位)
- Double(64)
- Int(32)
- Byte(8)
- Short(16)
- Long(64,类型用大写L,如12L),
kotlin支持二进制、十进制、十六进制; 注意: 不支持八进制(而java以0开头表示八进制 07)
自 Kotlin 1.1 起,用下划线使数字更易读:
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
在kotlin中的基本数据类型的看起来就是java的装箱类型,在这里我们需要注意,kotlin中已经没有来装箱类型,区分装箱还是基本类型,kotlin已经交给了编译器去处理。
我们平时在java中可以将声明的int类型赋值给Long类型(java会自动拆箱装箱)常说的隐式转换,但是kotlin并不可以,必须进行类型转换(显式转换)
如(隐式转换):
val anInt: Int = 5
val aLong: Long = anInt
则无法变异通过,需改成(显示转换):
val anInt: Int = 5
val aLong: Long = anInt.toLong()
装箱
在kotlin中,?表示这个对象可能为空。因此这一句“val b :Int ? = a”
表示的意思除了普通的数字赋值外,还多了一层含义:如果被赋值对象为空,则开辟内存创建新的对象。
val i: Int = 1000//Kotlin并不会自动装箱
println(i == i) //结果为true
val j: Int? = i
val k: Int? = i
//因为j和k都被当做对象操作,因此会将i进行装箱做操,然后复制给j、k
println(i === j)//结果为false
println(j === k)//结果为false
val i: Int = 1000//i并不会自动装箱
println(i == i) //结果为true
val j: Int = i //j未被当成对象操作因此不会进行装箱操作
val k: Int? = i//k都被当做对象操作,因此会将i进行装箱做操,然后复制给k
println(i === j)//结果为true
println(j === k)//结果为false
JVM虚拟机中维护着有符号整形常量池(-128,127),在这个范围里的数值都会直接使用常量池的内存地址,所以这个范围内的数值装箱后比较内存地址依旧是相等的。(常量池主要用于存放两大类常量:字面量(Literal)和符号引用量(Symbolic References))
val b:Int = 5
val b1:Int? = b
val b11:Int? = b
println(b1 === b11) // 注意这里打印的是 'true'
val a: Int = 10000
val a1: Int? = a
val a11: Int? = a
println (a1 === a11 ) //注意这里打印的是 'false'
每个数字类型支持如下类型转换:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
2.== 与 ===
kotlin中并没有单纯的数值,在我们定义每一个数值的时候,kotlin编译器都在默默的为我们将定义的数值封装成一个对象,以最大限度的解决空指针异常的问题。因此kotlin中数值的比较除了我们常见的 == 号之外还多了 ===
java | kotlin | 说明 |
---|---|---|
equal | == | 【结构相等】比较两个具体的【数值的大小】是否相同 |
== | === | 【引用相等】比较两个对象【在内存的存储地址】是否相同 |
例如:
val a : Int = 10//Kotlin并不会自动装箱
println(a === a) //此处返回的值为true
val b : Int = a
println(a === b) //此处返回的值为true,
println(a == b) //此处返回的值为true.
2.布尔类型(Boolean)
2.1 Boolean关键字表示布尔类型,并且其值有true和false.
var isNum: Boolean
isNum = false
println("isNum => $isNum")//输出结果为false
2.2、逻辑操作符(与Java相同)
- ' || ' => 逻辑或(或者)
- ' && ' => 逻辑与(并且)
- ' ! ' => 逻辑非(取反)
3.字符型(Char)
这里需要注意一点的是:
与java不同,kotlin中Char类型仅仅表示字符,不能再被直接当做数字。 因此,Char类型的变量必须在单引号之间表示:’变量’。
一段简单的java代码如下:
char a = 'c';
System.out.println(a+1);
此时打印的结果为【数字】100。
而作为对比,在kotlin中:
val a : Char = 'c'
println(a+1)
上述代码的打印结果为【字符】d
因此我们要明确:Kotlin中 Char类型由于不是直接当数值用,所以最后返回依旧是Char型。
5.字符串.
5.1与java类似,kotlin中的String同样是由final修饰的,即不可被继承。
5.2在kotlin中,字符串可以包含字符串模板用来表示前面用的到的一段代码。kotlin中规定,所有的字符串模板必须以美元符号”$”开头。
val a = "temp"
val q = "$a.length():"
println(q+a.length)//输出结果为temp.length():4
5.3用for循环迭代字符串.
for (s in "12345"){println(s)}
6.数组.
kotlin | java |
---|---|
IntArray | int[] |
ShortArray | short[] |
LongArray | long[] |
FloatArray | float[] |
DoubleArray | double[] |
CharArray | char[] |
val a = arrayOf(1,2,3) //1,2,3
网友评论