当前位置:网站首页>Kotlin—基本语法(二)
Kotlin—基本语法(二)
2022-07-31 09:09:00 【光临天下】
本篇含有小量的实战练习,下面的数据类型,强烈建议你在IDE手动练习,请勿复制!!!
一、数据类型
在Android中使用Kotlin编写的代码会靠Java虚拟机,所以数据类型最终被编译成为Java数据类型。
所以先简单的说一下Java的数据类型
1.Java的数据类型
Java语言的数据类型分为:基本类型和引用类型。基本类型变量在计算机中保存的是数值,当赋值或作为参数传递给函数时基本类型数据会创建一个副本,把副本赋值或传递给函数,这副本被改变不会影响原始数据。引用类型在计算机中保存的是指向数据的内存地址,即引用,当赋值或作为参数传递给函数时引用类型数据会把引用赋值或传递给函数,事实上引用有多少个副本,都是指向相同的数据,通过任何一个引用修改数据,都会导致数据的变化。
1.1 Java基本数据类型
整数类型:byte、short、int、long,int是默认类型。
浮点类型:float和double,double是默认类型。
字符类型:char。
布尔类型:boolean。
2.Kotlin的基本数据类型
下面就是Kotlin的基本数据类型,基本和Java差不多,但是细心的同学会放下Kotlin的是大写的,与Java不同。而且Kotlin没有包装类,它会随着使用的场景自动的编译为Java的基本类型或者包装类(很智能)
整数类型:Byte、Short、Int和Long,Int是默认类型。
浮点类型:Float和Double,Double是默认类型。
字符类型:Char。
布尔类型:Boolean。
val byte: Byte = 1 //byte类型
val short: Short = 1 //Short类型
val int: Int = 1 // Int类型
val long: Long = 1L //Long类型可以加L
//var long1:Long=1l //long类型只能加大写L
val double: Double = 1.00 // Double类型
val float: Float = 1.0F // Float要加F或者f
val char: Char = 'c' //Char类型
val string: String = "王" //String类型
注意:在 Kotlin中Char不是数字
Java
private char aChar = 1; //编译通过
Kotlin
var char:Char=1 //编译错误
2.1kotlin数据类型的范围
数据范围,我也记不得了,你可点击这里查看
2.2 Kotlin隐式转换
Kotlin 处理数字在某种程度上接近 Java,但是并不完全相同。例如,对于数字没有隐式拓宽转换(如 Java 中
int
可以隐式转换为long
),另外有些情况的字面值略有不同。
kotlin的隐式转换只能在数学计算:
规律是这样的:
首先同类型计算不变(Int+Int=Int) 没有问题
2.2 Kotlin显式转换
fun main(args: Array<String>) {
var int: Int = 1
var byte: Byte = 1
int = byte //错误
int = byte.toInt() //正确
}
Kotlin的转换使用to**,转成什么就to什么,看栗子
栗子:
很简单吧
3.Kotlin的可空类型
在Kotlin里有一种类型叫可空类型,这也是Kotlin在预防空指针异常的优点。
在Kotlin只有可空类型才可以接受空值!
栗子1
fun main(args: Array<String>) {
var string: String = null //编译错误
var string1: String? = null //编译正确
}
在Kotlin里在类型后面加一个?就是可空类型。但是为了安全可空类型不能直接赋值给非可空类型。
栗子2
var string: String
var string1: String? = null //编译正确
string = string1 //错误
string1 = string //正确
栗子2很容易明白吧。
注意 可空类型在具体使用时会有一些限制:
- 不能直接调用可空类型对象的函数或属性。
- 不能把可空类型数据赋值给非空类型变量。
- 不能把可空类型数据传递给非空类型参数的函数。
但是有时候我们要使用的场景要突破这些限制
安全调用运算符:?.
安全转换运算符:as?
Elvis运算符:?:
非空断言:!!
举例子 非空断言:
var int1: Int? = 1
var int2: Int? = 1
var int3: Int = int1 + int2 //编译错误
var int4: Int = int1!! + int2!! //在值后面加上断言,编译通过
注意:断言只有在你很确定的时候再使用,否则很可能引发空指针异常,还有一个注意点
你注意最后一行的到int1和int2的颜色不一样了吗?
这次我把int3和int4换行了,结果报错了。想知道为什么吗?
因为断言一旦编译器知道了不为空,下面在一定区域编译器默认它不为空了。什么一定区域?多大?自己去试试吧!
Elvis运算符 栗子:
在网络请求,有时候我们知道会返回空,但是我们又不想要null怎么办?
var string: String? = "wang"
var string1: String? = null
var string3: String = string1 ?: "wang" //此时string3=wang
安全调用运算符:?. 栗子:
var int1: Int? = null
var int2: Int = 1
var int3: Int? = int1?.plus(1)
println(int3)
这段代码在Java中就抛异常了,因为null+1.好好体会,哈哈。而结果是打印的null。
使用安全调用运算符我们的结果为null时,只会返回结果为null,而不会抛异常。
二、代码规范
编程语言离不开代码规范,为什么我要在这讲代码规范,因为刚经过了一些练习,所以我想在这讲一些简单,而又重要的代码规范。我也不仔细讲了,帮你列出来吧!
- 变量名使用驼峰命名法
- 常量名全部大写
重载布局(就是重载的方法等放在一起,方便找到)
具体查看(太多了不想一一列出,但是请不要忽略,至少看看吧)
本节就到这里了,希望你把之前的都掌握了
边栏推荐
猜你喜欢
js部门预算和支出雷达图
【微信小程序开发】生命周期与生命周期函数
[What is the role of auto_increment in MySQL?】
混合型界面:对话式UI的未来
搭建frp进行内网穿透
[Yellow ah code] Introduction to MySQL - 3. I use select, the boss directly drives me to take the train home, and I still buy a station ticket
安装sambe
Flutter Paystack implements all options
利用frp服务器进行内网穿透ssh访问
djangoWeb应用框架+MySQL数据4
随机推荐
js department budget and expenditure radar chart
How to restore data using mysql binlog
【微信小程序开发】生命周期与生命周期函数
第八章 、接口
【节选】吴恩达给出的AI职业生涯规划
SSM integration case study (detailed)
02 Truffle TutorialToken 示例
[MySQL exercises] Chapter 2 Basic operations of databases and data tables
A Spark SQL online problem troubleshooting and positioning
How on one machine (Windows) to install two MYSQL database
@RequestBody和@RequestParam区别
零代码工具推荐 八爪鱼采集器
来n遍剑指--05. 替换空格
JSP session的生命周期简介说明
【MySQL功法】第3话 · MySQL中常见的数据类型
js radar chart statistical chart plugin
matlab常用符号用法总结
MySQL 操作语句大全(详细)
搭建frp进行内网穿透
[Yellow ah code] Introduction to MySQL - 3. I use select, the boss directly drives me to take the train home, and I still buy a station ticket