Kotlin 基础 - 数据类型

一、Boolean 类型

Boolean 值有两个值,分别为 true 或 false。多数情况下,Kotlin 中的 Boolean 相当于 Java 中的基本类型 boolean,只有在必要的情况下才会装箱成为 Java 中的装箱类型 Boolean。这一切都是交由编译器来完成,我们无需关心。

var isFirst: Boolean = true
var isSecond: Boolean = false

二、Number 类型
Kotlin 基础 - 数据类型

var aLong: Long = 123L
var aInt: Int = 1234567890
var aShort: Short = 12345var aFloat: Float = 23F
var aDouble: Double = 23.0var aByte: Byte = 127

基本类型的装箱与拆箱
Kotlin 不再区分装箱与非装箱类型,在需要的时候编译器会帮我们自动的选择是使用基本类型还是装箱类型。

三、Chat 类型
Chat 类型表示一个字符,一个字符可以是一个字,或者一个符号等等。
字符占两个字节,表示一个 16 位的 Unicode 字符。
字符使用单引号 '' 引起来,例如 '中','A','\n'。
Kotlin 基础 - 数据类型

四、数值类型的显式转换
在 Java 里面,将一个 int 值赋给 long 值,是可以允许的,因为 Int 的范围比 long 要小,所以 long 可以兼容 int。但是,在 Kotlin 中这样的隐式转换是不被支持的

var aInt: Int = 10
var    aLong: Long = 10000// 编译器会报错
aLong = aInt// 必须调用 toXXX 方法显示转换
aLong = aInt.toLong()

每个数值类型都支持下面的转换

    1. toLong:Long
    1. toInt:Int
    1. toShort:Short
    1. toFloat:Float
    1. toDouble:Double
    1. toByte:BytetoChar: Char
    1. toString: String

五、字符串类型
字符串本质上可以说是"一串" Char,字符串使用双引号 "" 引起来5.1 字符串的比较

var aName: String = "fancyluo"
var bName: String = "fancyluo"println(aName == bName) // true
println(aName === bName)// false

熟悉 Java 的同学对以上结果是不是就困惑了,怎么 == 打印出来了 true,这里我们可以看看== 的源码就可以解开疑惑了。

public open operator fun equals(other: Any?): Boolean

Kotlin 的 == 就相当于 Java 的 equeals,表示比较内容。
Kotlin 的 === 就相当于 Java 的 ==,表示比较对象是否相同。

5.2 字符串模板

在 Kotlin 中,字符串可以包含模板表达式,模板表达式由 $ 开头,如果需要进行表达式运算,可以写在 {} 里面

var a: Int = 1
var b: Int = 2// Java
println("" + a + " + " + b + " = " + (a + b))// 字符串模板
println("$a + $b = ${a + b}")// print: 1 + 2 = 3// 原始字符串
var rawString = """ab${a + b}
"""

六、数组
Kotlin 中的数组由 Array 类表示,表示以一系列的对象,可以使用函数 arrayOf 来创建数组,示例如下

val arrayOfString: Array<String> = arrayOf("fancy", "luo")
val arrayOfUser: Array<UserInfo> = arrayOf(UserInfo("fancyluo", "音乐"),UserInfo("jack", "篮球"))

可以看到,我们使用 val 来修饰数组,在 Kotlin 中,数组是不可变的。上面数组里我们放的都是对象,那么基本类型的数组呢?Kotlin 中为了防止装箱拆箱的操作,为每个基本类型都专门定制了相应的数组类型,从而避免过度装箱的消耗。例如:IntArray,CharArray 等等

val arrayOfInt: IntArray = intArrayOf(1, 2, 3)
val arrayOfChar: CharArray = charArrayOf('中', '国')

七、区间
区间是一个数学上的概念,表示范围。Kotlin 中区间是 ClosedRange 接口的子类,一般比较常用的是 IntRange。

// 闭区间 [0,1024]
var range: IntRange = 0..1024
// 半开区间 [0,1024) = [0,1023]
var untilRange = 0 until 1024fun main(args: Array<String>) {// 判断是否在区间中print(666 in range))// 区间迭代for (i in range) {print("$i, ")}
}

八、空类型安全

fun getName(): String{return null
}

上面的代码在编译器里是会报错的,普通情况下,Kotlin 中是不允许返回 null 类型的,这也就表明,我们在取这个值的时候,无需担心,直接使用即可。那我们就是想返回 null 呢? 在返回值后面加个 ? 即可。

fun getName(): String?{return null
}

但是,返回了空类型之后,要使用这个函数就不是这么简单了,如果你并不确定此函数返回的是否为空,那么你需要在函数后面加上一个?,如果你确定的知道此函数不会返回空,那么你可以在函数后面加上 !! 表示我明确知道返回值不为空,可放心使用。

// 此行代码会报错
var nameLength = getName().length// 不确定是否为空
var nameLength = getName()?.length// 确定不为空
var nameLength = getName()!!.length// getName 不为空则返回值,为空则不再执行后面的逻辑
var nameLength = getName() ?: return

转载于:https://blog.51cto.com/13983283/2363036

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软公布Entity Framework 8.0规划

微软.NET团队在博客上公布了有关 Entity Framework Core 8.0&#xff08;也称为 EF Core 8 或 EF8&#xff09;的未来规划。EF Core 8 是 EF Core 7 之后的下一个版本&#xff0c;这将是一个长期支持版本&#xff1b;计划于 2023 年 11 月与 .NET 8 同时发布。该公司表示&#…

roku能不能安装软件_如何阻止假期更改Roku主题

roku能不能安装软件Wondering why your Roku looks…different? Roku occasionally changes the background for its millions of users, something they call a “featured theme.” 想知道为什么您的Roku看起来...不同吗&#xff1f; Roku偶尔会改变其数百万用户的背景&…

助力AIoT,雅观科技发布空间智能化操作系统

雷锋网(公众号&#xff1a;雷锋网)消息&#xff0c;3月14日&#xff0c;雅观科技在上海举办了“「AI」悟及物 「柔」生万屋”2019雅观科技新品发布会&#xff0c;发布了空间智能化操作系统Akeeta、空间智能化柔性服务技术中台Matrix&#xff0c;以及基于两者开发的雅观智慧社区…

如何在Windows 10的地图应用程序中获取离线地图

If you know you’re going to be using your PC in a location without an Internet connection, and you need access to maps, you can download maps for specific areas in the “Maps” app in Windows 10 and use them offline. 如果您知道要在没有Internet连接的地方使…

XenApp_XenDesktop_7.6实战篇之八:申请及导入许可证

1. 申请许可证 Citrix XenApp_XenDesktop7.6和XenServer 6.5申请许可证的步骤是一致的&#xff0c;由于之前我已经申请过XenApp_XenDesktop的许可证&#xff0c;本次以XenServer6.5的许可证申请为例。 1.1 在申请试用或购买Citrix产品时&#xff0c;收到相应的邮件&#xff0…

Windows 11的记事本将获得类似浏览器的标签功能

Windows 11已经向全世界的客户推出&#xff0c;自从它问世以来已经收到各种有趣的更新。例如&#xff0c;Windows 11的22H2版本&#xff08;操作系统的第一个大更新&#xff09;为文件资源管理器添加了标签&#xff0c;启用了任务栏的拖放支持&#xff0c;以及更多。Windows-11…

译⽂:Top Three Use Cases for Dapr and Kubernetes

有关译者&#xff1a;陈东海(seachen)&#xff0c;⽬前就职于腾讯&#xff0c;同时在社区也是⼀名Dapr Member.导语&#xff1a;在SDLC(Software Development Lifecycle软件开发⽣命周期中)&#xff0c;绝⼤多数CNCF项⽬都是专注于软件开发的中后期阶段&#xff0c;特别是运维和…

平视相机svo开源项目_什么是平视显示器(HUD),我应该得到一个吗?

平视相机svo开源项目In a world full of augmented reality snowboard goggles and Google Glass, it seems only fair that our cars get to enjoy some of the same treatment. Heads-up displays, or “HUDs” as they’re better known, are a new type of add-on for cons…

react项目打包后路径找不到,项目打开后页面空白的问题

使用 npm install -g create-react-app快速生成项目脚手架打包后出现资源找不到的路径问题&#xff1a; 解决办法&#xff1a;在package.json设置homepage 转载于:https://www.cnblogs.com/lan-cheng/p/10541606.html

ios 拍照 实现 连拍_如何在iOS设备上使用连拍模式拍照

ios 拍照 实现 连拍We’re sure you’ve tried to capture that perfect moment with your camera and you’re just a tad too late or too early and you miss it. If you own an iPhone or iPad, you can use burst mode and never miss that perfect shot again. 我们确定您…

路由热备份(HSRP)DynamipsGUI小试牛刀

——好久不见啊&#xff0c;大家最近过的还好吗&#xff1f;——学而不思则罔&#xff0c;思而不学则殆。好了&#xff0c;既然已经踏上了CCNP之旅&#xff0c;那就和大家一起分享一下学习HSRP的体会吧——在CCNA中我们设计网络的目的主要是——通&#xff01;到了CCNP&#xf…

WPF 如何实现简单放大镜

WPF 如何实现简单放大镜控件名&#xff1a;Magnifier作 者&#xff1a;WPFDevelopersOrg - 驚鏵原文链接[1]&#xff1a;https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用.NET40&#xff1b;Visual Studio 2019;实现此功能需要用到 VisualBrush &#xff0c;放大镜…

input 禁用智能提示_如何在智能手机上禁用紧急警报

input 禁用智能提示AMBER and emergency alerts occur when there’s a child abduction or there’s an important event such as a severe weather alert (tornado warning) that local governments needs to make people aware of. While we don’t recommend disabling the…

laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy

这两天项目中需要将HTML页面转换为PDF文件方便打印&#xff0c;我在网上搜了很多资料。先后尝试了laravel-dompdf和laravel-snappy两种扩展包&#xff0c;个人感觉laravel-snappy比较好用。 一、使用laravel-dompdf扩展包 1、安装扩展包 我们通过composer来安装 composer requi…

使用jenkins进行项目的自动构建部署

jenkins 简介 Jenkins是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;功能包括&#xff1a;持续的软件版本发布/测试项目和监控外部调用执行的工作。 官网地址地址&#xff1a; https://jenkins.io 下载安装启动 CentOS 下用yum进行安装启动 …

如何删除Apple Music中的连接功能

Love Apple Music, but tired of the intrusive Connect feature taking up space on your favorite artist’s page? Well, don’t worry, because getting “dis-Connected” is just a matter of changing a few simple settings in your iPhone or iPad running iOS 8.0 o…

python设计模式(十四):模板方法模式

定义一个算法或者流程&#xff0c;部分环节设计为外部可变&#xff0c;用类似于模板的思想来实例化一个实体&#xff0c;可以往模板中填充不同的内容&#xff1b;在模板思想下&#xff0c;实体的整体框架是确定的&#xff0c;他是一个模板&#xff0c;但是模板下内容可变&#…

PeeringDB初探

做网络相关工作的&#xff0c;可能需要了解PeeringDB这个网站&#xff08;https://www.peeringdb.com)&#xff0c; 这里有大部分公开注册的 ASN&#xff08;Autonomous System Number) 以及他们相互直接做Peering的信息&#xff0c;这也是这个网站名字的由来。据统计&#xff…

修复windows脸部识别_如何在Windows 10中改善面部识别

修复windows脸部识别If you have the right hardware, Windows 10 lets you unlock your computer with nothing but a smile. However, Microsoft’s facial recognition isn’t always spot-on. Here’s how to help Windows recognize you better. 如果您拥有合适的硬件&…