Kotlin——数据类型(2)

在了解数据类型之前,我们先了解一下Kotlin中varval的区别:
Kotlin中有两个关键字定义变量,这两个关键字外形看着差别很小就只差了一个字母,但实际差别很大的。
var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和java中声明变量的方式一样。
val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。

1、Boolean类型

在Kotlin当中,Boolean类型大多数情况相当于java中基本类型boolean,只有在必要的时候才会装箱成java中装箱类型Boolean。那我们到底选择哪一个呢,其实都交给编译器去处理了,我们不需要去担心。

val tbool:Boolean = true
val fbool:Boolean = false

2、Number类型

主要包括整型和浮点型。


Number类型.png
//整形
val num1:Int = 8  //十进制 8
val num2:Int = 0XFF  //十六进制 255
val num3:Int = 0b00000011  //二进制 3
val maxInt:Int = Int.MAX_VALUE  //最大整型值
val minInt:Int = Int.MIN_VALUE  //最小整型值

//长整形
val along:Long = 123432424342324
println(18L)  //整型强转长整形
Long.MAX_VALUE  //最大长整型值
Long.MIN_VALUE  //最小长整型值

//短整形
val aShort:Short = 12345
Short.MAX_VALUE  //最大短整型值
Short.MIN_VALUE  //最小整型值

//字节
val aByte:Byte = 127
Byte.MAX_VALUE  //Byte最大值 127
Byte.MIN_VALUE  //Byte最小值 -128

//单精度
val aFloat:Float = 2.0F  //在Kotlin中2.0默认表示双精度,所以需要加f强转 2.0
val another:Float = 1E3f  //10的3次方 1000.0
Float.MAX_VALUE  //最大单精度
Float.MIN_VALUE  //最小单精度,但MIN_VALUE是最小的正数(负数的最大值),非0,加上-号。所以可用 -Float.MAX_VALUE去表示

//双精度
val aDouble:Double = 3.0
val anotherD:Double = 2.34354
Double.MAX_VALUE   //最大双精度
Double.MIN_VALUE  // //最小双精度,与Float.MIN_VALUE类似,也是一个正数

NaN,“not a number”一个不是数的数,
例如:

println(0.0F/0.0F) //输出结果 NaN
prinln(0.0F/0.0F ==Float.NaN)  //输出结果 false

说明NaN的结果和其他NaN的结果不是相等的,比较起来没有意义,也不要去尝试。

3、Char类型

字符对应java的Character
占两个字节,标示一个16位的Unicode字符
字符用单引号 ' 引起来,例如:'a', '6', '\n'

val aChar:Char = 'a'
val bChar:Char = '中'
val cChar:Char = '\u000f'  //Unicode字符
转义字符.png

4、基本类型的转换

不可隐士转换

val anInt:Int = 5
val aLong:Long = anInt.toLong()  //  这样才可以转换
val aShort:Short = 12345
val aD:Double = aShort.toDouble()//  这样才可以转换

5、字符串

val string:String = "hello"  //声明一个字符串
val fromChars:String = String(charArrayOf('h','e','l','l','l','o'))  //字符数组
println(string == fromChars)   //== 比较值
println(string === fromChars)   //=== 引用

输出结果:分别是true和false。
所以“a==”比较的是内容是否相同,即类似java的equals,“a===b”比较对象是否相同
字符串模板特性

val arg1: Int = 0
val arg2: Int = 1
println("" + arg1 + " + " + arg2 + " = " + (arg1 + arg2))
println("$arg1 + $arg2 = ${arg1 + arg2}")
输出结果.png

**原始字符串 """ **
原始字符串用三个"标示,内部字符串无法转义。

var rawStr:String = """\t\n\$666\t哈哈哈"""
println(rawStr.length)

"""原始字符,输出结果.png

字符串.length获取字符串长度

5、类与对象

与java中概念基本相同,只不过写法不同。
Any相当于java中的Object

class 妹子(性格: String, 长相: String, 声音: String): 人(性格, 长相, 声音)
class 帅哥(性格: String, 长相: String, 声音: String): 人(性格, 长相, 声音)

open class 人(var 性格: String, var 长相: String, var 声音: String){
    init {
        println("new 了一个${this.javaClass.simpleName}, ta性格:$性格, 长相:$长相, 声音:$声音")
    }
}

fun main(args: Array<String>) {
    val 我喜欢的妹子: 妹子 = 妹子("温柔", "甜美", "动人")
    val 我膜拜的帅哥: 帅哥 = 帅哥("彪悍", "帅气", "浑厚")
    println(我喜欢的妹子 is 人)  //判断是属于某个类
}

6、空类型和智能类型转换

7、包

8、区间

一个数学上的概念,表示范围
ClosedRange的子类,InteRange最常用
基本写法:

0..100表示 [0,100]
0 until 100表示 [0,100)
(0..100).contains(i) 和 i in 0..100 均判断i是否在区间[0,100]中

9、数组

1、基本写法:

val array:Array<T> = arrayOf(...)

2、基本操作

print array[i] 输出第i个成员
array[i] = "Hello" 给第i个成员赋值
array.length 数组的长度

为了避免不必要的装箱和拆箱,基本类型的数组是定制的

Java Kotlin
int[] IntArray
short[] ShortArrary
long[] LongArrary
float[] FloatArrary
double[] DoubleArrary
char[] CharArrary

3、创建数组

(1)创建空数组,只读

val arrayEmpty = emptyArray<String>()

(2)创建指定长度的可空数组

val array1 = arrayOfNulls<Int>(5)
for (i in 0..4) {
    array1[i] = i
}

(3)创建指定长度数组

val array4 = Array(5, {0})

初始化长度为5,元素均为0的数组

val array5 : Array<String> = Array(5, {""})
for (i in 0..2) {
    array5[i] = i.toString()
}

初始化长度为5,元素均为""的数组,并为数组前3个元素赋值,"0", "1", "2", "", ""

(4)使用闭包创建数组

val array = Array(4, { i -> i * i })  //0,1,4,9,16

(5)使用Kotlin封装方法创建数组

val array1 = arrayOf(1, 2, 3, 4)
val array2 = intArrayOf(1, 2, 3, 4)

3、遍历数组

 var arr:IntArray = intArrayOf(1,2,3,4,5,6,7,8,9,10,11)
// 迭代器遍历数组1
val it = arr.iterator()
for (item in it.iterator()) {
    println(item)
}
// 迭代器遍历数组2
val it1 = arr.iterator()
it1.forEach {
    println(it)
}
// forEach遍历数组
arr.forEach {
    println(it)
}
for((index,value) in arr.withIndex()){
     print("$index -> $value,")
}

for(indexValue in arr.withIndex()){
     print("${indexValue.index} -> ${indexValue.value},")
}
// 等等...
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269