Kotlin 第二站

Kotlin 基本数据类型


//Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于Java的是,字符不属于数值类型,是一个独立的数据类型。

//类型 位宽度

//Double 64

//Float 32

//Long 64

//Int 32

//Short 16

//Byte 8

//十进制:123

//长整型以大写的 L 结尾:123L

//16 进制以 0x 开头:0x0F

//2 进制以 0b 开头:0b00001011

//注意:8进制不支持

//Kotlin 同时也支持传统符号表示的浮点数值:

//Doubles 默认写法: 123.5, 123.5e10

//Floats 使用 f 或者 F 后缀:123.5f

//Kotlin 中没有基础数据类型,只有封装的数字类型,你每定义的一个变量,

//其实 Kotlin 帮你封装了一个对象,这样可以保证不会出现空指针。

//数字类型也一样,所有在比较两个数字的时候,就有比较数据大小和比较两个对象是否相同的区别了。

//在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小。

fun main(args:Array){

val a:Int = 1000

println(a===a)//true 值相等,地址也相等

// //虽然经过了装箱,但是值是相等的,都是1000

val boxA:Int? = a

val boxB:Int? = a;

// === 比较的是地址,==比较的是值

println(boxA === boxB)//false 经过封装之后,地址不同

println(boxA == boxB)// true 比较的是值

// 类型转换

// 由于不同的表示方式,较小类型并不是较大类型的子类型,较小的类型不能隐式转换为较大的类型。

// 这意味着在不进行显式转换的情况下我们不能把 Byte 型值赋给一个 Int 变量。

val b:Byte = 1

// val i:Int = b//报错,编译不过

val i:Int = b.toInt();

// 每种数值类型都有下面这几种方法

// toByte(): Byte

// toShort(): Short

// toInt(): Int

// toLong(): Long

// toFloat(): Float

// toDouble(): Double

// toChar(): Char

// 有些情况下也是可以使用自动类型转化的,

// 前提是可以根据上下文环境推断出正确的数据类型而且数学操作符会做相应的重载。例如下面是正确的:

val l:Long = 1L + 3

// 位运算符

// 对于Int与Long还有一系列的位操作符可以使用,分别为:

// shl(bits) ->(Java's <<)  左位移

// shr(bits) ->(Java's >>)  右位移

// ushr(bits) ->(Java's >>>) 无符号右移

// and(bits) -> 与

// or(bits) -> 或

// xor(bits) -> 异或

// inv()-》 反向

// 字符

// 和Java不同,kotlin的Char不能直接与数字操作,Char必须用''包裹起来;比如'1','a'

val c : Char = '1'

// if(1 == c) //语法错误,编译不通过

// 字符字面值用单引号括起来: '1'。 特殊字符可以用反斜杠转义。

// 支持这几个转义序列:\t、 \b、\n、\r、\'、\"、\\ 和 \$。

// 编码其他字符要用 Unicode 转义序列语法:'\uFF00'。

// 我们可以显式把字符转换为 Int 数字:

println(decimalDigitValue('2'))

// println(decimalDigitValue('a'))

// 布尔

//布尔用Boolean类型表示,它的两个值是true 和 false

//若需要可空引用布尔会自动装箱

//内置的布尔类型有 || 短路逻辑或  && 短路逻辑与 !逻辑非

// 数组

// 数组用类Array实现,并且还有一个size属性及get和set方法,由于使用【】重载了get和set方法,

// 所以我们可以通过下表很方便的获取或者设置数组对应位置的值。

// 数组的创建有两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数

val array = arrayOf(1,2,3)

val arrayB = Array(3,{i-> i*3})

println(array[0])

println(arrayB[2])

for(i in array){

println(i)

}

for(i in arrayB){

println(i)

}

// 如上所述,[]运算符代表调用成员函数get()和set()。

// 注意,与Java不同的是,kotlin中数组是不型变得

// 除了类Array,还有ByteArray ShotArray IntArray,用来表示各个类型的数组,省去了装箱操作,因此效率更高,用法和Array相同

// 字符串

// 和Java一样,String是不可变得。方括号[]语法可以很方便的获取字符串中的某个字符,也可以通过for循环来遍历

val s:String ="abcdefghijk"

for(str in s){

println(str)

}

// Kotlin 支持三个引号 """ 扩起来的字符串,支持多行字符串,比如:

val text = """

    >多行字符串

    >多行字符串

    """

    println(text)   // 输出有一些前置空格

// String 可以通过 trimMargin() 方法来删除多余的空白。

println(text.trimMargin(">"))//前置空格删除了

// 默认 | 用作边界前缀,但你可以选择其他字符并作为参数传入,比如 trimMargin(">")。

// 字符串模板

// 字符串可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。

// 模板表达式以美元符($)开头,由一个简单的名字构成:

val si = 10

val sis = "si = $si"

println(sis)

val ss = "runoob"

val str = "$ss.length is ${ss.length}"

// 原生字符串和转义字符串内部都支持模板。

// 如果你需要在原生字符串中表示字面值 $ 字符(它不支持反斜杠转义),你可以用下列语法:

val price = """

    ${'$'}9.99

    """

    println(price.trim())  // 求值结果为 $9.99

}

fun decimalDigitValue(c:Char):Int{

if(c !in '0'..'9'){

throw IllegalArgumentException("out of ringe")

}

return c.toInt()

}


你可能感兴趣的:(Kotlin)