美文网首页
kotlin基础之二 数据类型

kotlin基础之二 数据类型

作者: 大鹏的鹏 | 来源:发表于2018-11-22 13:31 被阅读4次

一,数据类型.

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

相关文章

网友评论

      本文标题:kotlin基础之二 数据类型

      本文链接:https://www.haomeiwen.com/subject/rywkqqtx.html