当前位置:网站首页>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,而不会抛异常。
二、代码规范
编程语言离不开代码规范,为什么我要在这讲代码规范,因为刚经过了一些练习,所以我想在这讲一些简单,而又重要的代码规范。我也不仔细讲了,帮你列出来吧!
- 变量名使用驼峰命名法
- 常量名全部大写
重载布局(就是重载的方法等放在一起,方便找到)
具体查看(太多了不想一一列出,但是请不要忽略,至少看看吧)
本节就到这里了,希望你把之前的都掌握了
边栏推荐
猜你喜欢
【软考软件评测师】2012综合知识历年真题
科目三:左转弯
How to upgrade nodejs version
2019 NeurIPS | Graph Convolutional Policy Network for Goal-Directed Molecular Graph Generation
如何将亚马逊广告添加到您的 WordPress 网站(3 种方法)
MySQL----多表查询
来n遍剑指--06. 从尾到头打印链表
Hematemesis summarizes thirteen experiences to help you create more suitable MySQL indexes
SSM framework explanation (the most detailed article in history)
【NLP】Transformer理论解读
随机推荐
云服务器部署 Web 项目
Are postgresql range queries faster than index queries?
Scala基础【seq、set、map、元组、WordCount、队列、并行】
Andoird开发--指南针(基于手机传感器)
[MySQL exercises] Chapter 4 · Explore operators in MySQL with kiko
JSP session的生命周期简介说明
[What is the role of auto_increment in MySQL?】
How to restore data using mysql binlog
Hematemesis summarizes thirteen experiences to help you create more suitable MySQL indexes
优信年营收16亿:亏损3亿 已与蔚来资本及58集团签署股权协议
刷题《剑指Offer》day05
[转载] Virtual Studio 让系统找到需要的头文件和库
JSP response,request操作中(中文乱码)-如何解决呢?
【机器学习】用特征量重要度(feature importance)解释模型靠谱么?怎么才能算出更靠谱的重要度?
Flink1.15源码阅读——PER_JOB vs APPLICATION执行流程
【Redis高手修炼之路】Jedis——Jedis的基本使用
MySQL 的几种碎片整理方案总结(解决delete大量数据后空间不释放的问题)
Small application project development, jingdong mall 】 【 uni - app custom search component (below) - search history
Linux安装mysql
Flink1.15 source code reading - PER_JOB vs APPLICATION execution process