kotlin基础之二 数据类型

基于JVM的静态类型语言,所以我们可以得出,kotlin是兼容java的,但是kotlin又比java多出来很多优势:

  • 不写分号
  • 支持方法扩展
  • 支持lambda表达式
  • 支持函数编程
  • 对null的判断

一,数据类型.

1.数字类型Number。

  • Float(32位)
  • Double(64)
  • Int(32)
  • Byte(8)
  • Short(16)
  • Long(64,类型用大写L,如12L)
   var a: Byte = 1
    var b: Short = 1
    var c: Int = 5
    var d: Long = 1L
    var e: Float = 1.555F
    var f: Double = 1.555

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

== 与 ===
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基础之二 数据类型)