Kotlin 基本数据类型及运算符

Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等等;这里要注意,字符不属于数值类型,是一个独立的数据类型;

    val intNum = 1000  // Int
    val intNum1 = 0b11  // Int 二进制类型,值为 3
    val intNum2 = 0xFF  // Int 十六进制类型,值为 255
    val longNum = 1000002L  // Long
    val doubleNum = 135.2  // Double
    val floatNum = 111.2f  // Float

Kotlin 中对于装箱的类型数据,比如说 Int 数据,如果超过128的话,比较两个数的值使用 == ,如果要比较对象地址值的话就是用 === ;同时,对象比较时,我们经常会重写 equals() 方法,在这里, == 和 equals() 可以理解为是相等的。   

    fun test(){
        val x : Int = 150
        println(x === x)

        val X: Int? = x
        val XX: Int? = x
        println(X === XX)
        println(X == XX)
    }

打印结果为

true
false
true

我们定义对象时,比如定义一个常量 Int 的值,可以有以下方式

    fun test1(){
        var i = 5
        var x : Int  = 5
        var y: Int? = null
        y = 5
        var z: Int?
        z = 5

        println("$i   $x   $y   $z")
    }

这四种写法都行,第一种是用了类型推导;第二种是明确定义了类型;第三种是初始值为null,延迟赋值;第四种是第三种的简写;在这里要注意,下面有个反例 var j = null  ,这样写编译器没报错,但是下一步没法写了,比如说想给 j 赋值 Int 或 String 类型,由于一开始没有指定类型就置空,所以编译器也不知道它是什么类型,无法推导,然后就没然后了,切记,这是个反例。

Java 中对于数据类型,可以直接转换,比如说 byte a = 78;int b = a; 但在 Kotlin 中这种写法是违规的,转换时会报错,怎么办?基本数据类型对应的有  toByte() 、toInt()、toLong()、toString() 等方法可以使用,Kotlin 中也支持数据相加时,小类型自动转换为大类型

    // Java
    byte a = 78;
    int b = a;

    // Kotlin
    val a: Byte = 1
    val b: Int = a // 错误
    val c: Int = a.toInt() // 正确

    val z = 1000L + 3 // Long + Int 结果z是  Long 类型

Kotlin 中的位操作符与Java的也有点不太一样,看下面对比

Kotlin        Java
shl     –     <<         左移位
shr     –     >>         右移位
and     –     &          与
or      –     |          或
xor     –     ^          异或

以上就是常用的操作符,记熟就行。


Java 中的 char 类型数据,直接定义即可 char i = 3; 但在 Kotlin 中不能这样,需要 var j : Char = '3' ;比如说用 char 减去 int 的数字,在Java中可以直接相减,会得到想要的值;但 Kotlin 中则不行,需要先转换为Int类型

// Java:
    private void testChar(){
        char i = '3';
        int j = 1;
        System.out.println(i - j); // 值为 50
    }

// Kotlin;
    fun test2() {
        val i: Char = '3'
        val j: Int = 1
        println(i - j) // 值为 2,错误
        println(i.toInt() - j) // 值为 50,正确
    }

kotlin 中的逻辑判断符 || 、&& 、 ! 这三个和 java 中都一样,用法也一样,这里就不多说了。

关于数组,有两种写法,一种是用 arrayOf() ,另一种是用工厂方式;对于 Int 类型的,还可以使用特定的数组

    fun test3() {
        val a = arrayOf(1, 2, 3)    //[1,2,3]
        
        val b = Array(3) { i -> (i * 2) }  //[0,2,4]
        
        val c = intArrayOf(1, 2, 3)   //[1,2,3]
    }

Kotlin 中的字符串,也有一些特殊的技能,比如说字符串换行,java中的 String s = "abc  def   ghj"; 字符窗s,如果从空格中换行,中间会用+号链接起来;kotlin 中则是支持用 """  来包裹字符串,换行用 | 来标识,结尾追加 trimMargin() 方法

Java:
String s = "abc  def   ghj";
String s = "abc " +
        " def  " +
        " ghj";

Kotlin:
val s   = """ abc  def   ghj """
val s   = """ abc
    |def
    |ghj """.trimMargin()

Kotlin 中的比较符也比较个性,比着java多了种用法,可以直接把if语句中返回的值赋给初始化的值

    fun test4() {
        val a = 1
        val b = 2
    
        var x : Int = a
        if (a < b) {
            x = b
        }
    
        var y: Int
        if (a > b) {
            y = a
        } else {
            y = b
        }
    
        val z = if (a > b) {
            a
        } else {
            b
        }
    
        println("$x   $y   $z ")
    }

in 这个关键字,在for循环中使用过,同时也可以用在if判断语句中,比如

    fun test5() {
        val i = 5
        if(i in 1..9){
            println("$i is in 1-9")
        } else {
            println("$i is not in 1-9")
        }
    }


打印出来的值是 5 is in 1-9 ,说明 i 是在 1-9 的范围内。同时,还有个 when 的关键字,类似于 java 中的 switch 关键字,

    fun test6() {
        val i = 5
        when (i) {
            1 -> print("i == 1")
            2 -> print("i == 2")
            in 6..9 -> print("i 在6和9的中间")
            else -> {
                print("i 不是 1 ,也不是 2")
            }
        }
    }

这里可以强调一点,如果 i 的类型是位置的,类似java中的 Object,在koltion中叫做 Any,这时候,when 的判断类型就多了n中变化,比如

    fun test7() {
        val i: Any = 5
        when (i) {
            1 -> print("i == 1")
            2 -> print("i == 2")
            is String -> print("i is String")
            in 6..9 -> print("i 在6和9的中间")
            else -> {
                print("i 不是 1 ,也不是 2")
            }
        }
    }

今天基本东西就是这些了,这些都是需要熟记的。

发布了176 篇原创文章 · 获赞 11 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Deaht_Huimie/article/details/103283466