1. Kotlin的基本类型
1.1 初步认识
举例
Java:
int a=2;
final String b ="Hello Java";
Kotlin:
var a:Int = 2;
val b:String = "Hello Java"
总结:
- Kotlin 没有基本数据类型,所有皆对象;
- Kotlin 声明之后.并且引入var 和val 对应 可变/不可变 类型;
- 不需要使用分号
;
-
:类型
不是必要的,可以类型推导
,如:
var a = 2;
val b = "Hello Java"
1.1 特别的注意
1.1.2 举例
Java :
long c= 123l;
long d = 321L;
Kotlin :
val c = 123L
总结: Kotlin 只能够使用大写
L
,这样更清晰
1.1.3 举例
Java: 可行
int e=10;
long f = e;
Kotlin:
val e:Int =10;
val f:Long=e; // 不可行
val f:Long= e.toLong();// 正确方式
总结: Kotlin 不允许直接转化类型(哪怕是Int 变成Long),这样更加严谨
1.1.4 举例
符号类型 | 无符号类型 | |
---|---|---|
字节 | Byte | UByte |
短整型 | Short | UShort |
整型 | Int | UInt |
长整型 | Long | ULong |
因为Kotlin 可以与C++ 公用,所以增加了无符号的特性
2. 字符串
举例:字符串的模板"""
val j = "小明"
print("My Name is ${j}")
总结: 使用
{} 可以做字符串的的占位符
举例:字符串的三个"""
// Raw String: 未经加工的String
val n ="""
大笨象
____-
"""
总结: 使用 三个
"
可以输出代用空格和换行的字符串
举例:字符串的比较
java:
a==b
a.equals(b)
kotlin
a===b
a==b
总结:
===
比较地址,==
相当于equals
. 辅助记忆: 等号越多相对更严格. 所以===
是一模一样的东西
4. kotlin的数组
Kt | Java | |
---|---|---|
整型 | IntArray | int[] |
整型装箱 | Array<Int> | Integer[] |
字符 | ChatArray | char[] |
字符装箱 | Array<Char> | Character[] |
字符串 | Array<String> | String[] |
XXArray: 某某数组, Array<T> 装箱类型的数组
举例: 数组的创建
Java
int[] arr= new int[]{1,2,3}
Kt
val c0 = intArrayOf(1,2,3)
val c1=IntArray(3){ it +1}
Tip: 数组的打印
val c0 = intArrayOf(1, 2, 3, 4, 5)
val c1 = IntArray(5) {
it + 1
}
println(c0.contentToString())
println(c1.contentToString())
举例:数组的读写
//Java
String[] d= new String[]{"A","B"};
d[1]="Java";
print(d[0]+","+d[1]);
//Kt
// 注: 这里的类型 Array<String>
val d = arrayOf("Hello", "Java")
d[1] = "Kt"
print("${d[0]},${d[1]}")
举例:数组的遍历
val e = floatArrayOf(1f, 2f, 3f, 4f)
val e2 = FloatArray(4) {
it + 1f
}
for (element in e2) {
print("$element")
}
e.forEach {
print("${it}")
}
if (e.asList().contains(1f)) {
print("1f exists in variable 'e' ")
}
for (i in e.indices) {
print("${e[i]}")
}
举例:区间的创建
// 闭区间
val intRange = 1..10
val charRange = 'a'..'z'
val longRang = 1L..100L
// 开区间
val intRangeExclude = 1 until 10
val charRangeExclude = 'a' until 'z'
val longRangeExclude = 1L until 100L
val intRangeReverse = 10 downTo 1 step 2
val charRangeRevese = 'z' downTo 'a'
// 遍历的使用
val IntArr = intArrayOf(1, 2, 3)
for (item in 0..IntArr.size) {
}
3. kotlin的集合框架的接口类型
Kotlin | java | |
---|---|---|
不可变List | List<T> | List |
可变List | MutableList<T> | List |
不可变Map | Map<K,V> | Map |
可变Map | MutableMap<K,V> | Map |
不可变Set | Set<T> | Set |
可变Set | MutableSet<T> | Set |
总结 : Kt 将常用的集合分为 不可变 和可变(MutableXXX)
val list = listOf<Int>(1, 2, 3)
val list2= mutableListOf<Int>(1,2,3)
// 注: 这里的to 中缀表达式 infix ; Any 等价于Object
val map1 = mapOf<String, Any>("k" to "benny", "age" to 20)
val map2 = mutableMapOf<String, Any>("k" to "benny", "age" to 20)
集合框架的创建
val stringList = ArrayList<String>()
他是怎么做到的呢? 为啥能直接创建ArrayList()的呢?
答:类型别名; 其实就是Java 的类,起了一个Kotlin的别名
typealias ArrayList<E> = java.util.ArrayList<E>
typealias LinkedHashMap<K, V> = java.util.LinkedHashMap<K, V>
typealias HashMap<K, V> = java.util.HashMap<K, V>
typealias LinkedHashSet<E> = java.util.LinkedHashSet<E>
typealias HashSet<E> = java.util.HashSet<E>
集合框架的CRUD
val stringList: MutableList<String> = mutableListOf();
// 增加
for (i in 0..10) {
stringList.add("2")
stringList += "1"
}
// 读取
for (i in 0..10) {
stringList.get(i)
stringList[i]
}
//删除
for (i in 0..10) {
stringList.remove("2")
stringList -= "1"
}
//迭代器遍历
val iterator = stringList.iterator()
while (iterator.hasNext()) {
val next = iterator.next()
if (next == "2") {
iterator.remove()
}
}
// 包含关系
if (stringList.contains("2")) {
}
if ("2" in stringList) {
}
// Map的使用
val map = mutableMapOf<String, Int>()
map.put("World", 20)
map["hello"] = 10
map.get("Hello")
map["World"]
// Pair的使用
// 这里是中缀表达式
val pair = "Hello" to "Kotlin"
val pair2 = Pair("k", "v");
val first = pair.first
val second = pair.second
// 这个是解构, 内部是component
val (x, y) = pair
kotlin的提示Tips
快捷键
Alt + Enter
- 最常用的快捷提示
Ctrl + Shift + P
- Type Info 查看当前的类型
双击Shift
- 搜索
show Kotlin ByteCode
'双击Shift'--> 输入show Kotlin ByteCode
-->点击Decompile:
可以看到Kotlin编译成的Java代码