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,一经查实,立即删除!

相关文章

全框眼镜拆卸镜片方法分享

全框眼镜拆卸镜片方法分享http://www.iqiyi.com/w_19ru97p1n9.html 很多直接用手掰就成&#xff08;眼镜布&#xff09; 转载于:https://www.cnblogs.com/OceanF/p/9288411.html

发送http请求

public static String httpGetSend(String url) {String responseMsg "";HttpClient httpClient new HttpClient();GetMethod getMethod new GetMethod(url);// GET请求try {// http超时5秒httpClient.getHttpConnectionManager().getParams().setConnectionTimeo…

微软公布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;以及基于两者开发的雅观智慧社区…

HTTP与HTTPS区别(详细)

转&#xff1a;http://blog.sina.com.cn/s/blog_6eb3177a0102x66r.html 1、减少http请求&#xff08;合并文件、合并图片&#xff09;2、优化图片文件&#xff0c;减小其尺寸&#xff0c;特别是缩略图&#xff0c;一定要按尺寸生成缩略图然后调用&#xff0c;不要在网页中用res…

Ajenti-Linux控制面板之自动化运维工具

ajenti http://ajenti.org/ https://github.com/ajenti/ajenti 源码 http://docs.ajenti.org/en/latest/ http://docs.ajenti.org/en/latest/man/install.html# 安装部署Fast remote access for every occasion Install once and never google for PuTTY downloads again. An…

MongoDB C# Driver 快速入门

MongoDB的官方C#驱动可以通过这个链接得到。链接提供了.msi和.zip两种方式获取驱动dll文件。C#驱动的基本数据库连接&#xff0c;增删改查操作。在使用C#驱动的时候&#xff0c;要在工程中添加"MongoDB.Bson.dll"和"MongoDB.Driver.dll"的引用。同时要在代…

如何在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连接的地方使…

Hive初识(二)

Hive分区Hive组织表到分区。它是将一个表到基于分区列&#xff0c;如日期&#xff0c;城市和部门的值相关方式。使用分区&#xff0c;很容易对数据进行部分查询。表或分区是细分成桶&#xff0c;以提供额外的结构&#xff0c;可以使用更高效的查询的数据。桶的工作是基于表的一…

网站计数器 web映射

站点的网站计数器的操作 <% page import"java.math.BigInteger" %> <% page import"java.io.File" %> <% page import"java.util.Scanner" %> <% page import"java.io.FileInputStream" %> <% page import…

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…

C#种将String类型转换成int型

API&#xff1a; 有一点是需要注意的&#xff0c;那就是必须保证该String类型内全为数字&#xff0c;能确保转换正确&#xff1b; 1.int.Parse(str);2.TryParse(str, out intA);3. Convert.ToInt32(str);以上都可以&#xff0c;其中 1和3 需要try&#xff5b;&#xff5d;异常&…

【本人秃顶程序员】技巧分享丨spring的RestTemplate的妙用,你知道吗?

←←←←←←←←←←←← 快&#xff01;点关注 为什么要使用RestTemplate&#xff1f; 随着微服务的广泛使用&#xff0c;在实际的开发中&#xff0c;客户端代码中调用RESTful接口也越来越常见。在系统的遗留代码中&#xff0c;你可能会看见有一些代码是使用HttpURLConnectio…

译⽂:Top Three Use Cases for Dapr and Kubernetes

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

MySQL数据库的datetime与timestamp

MySQL数据库中有datetime与timestamp两种日期时间型数据类型&#xff0c;其中timestamp可以用timestamp(n)来表示年月日时分秒的取值精度&#xff0c;如果n14则完整匹配于datetime的精度&#xff0c;那为什么还需要datetime这种类型呢&#xff1f;我做过试验&#xff0c;timest…

平视相机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…

yum 下载RPM包而不进行安装

yum命令本身就可以用来下载一个RPM包&#xff0c;标准的yum命令提供了--downloadonly(只下载)的选项来达到这个目的。 $ sudo yum install --downloadonly <package-name> 默认情况下&#xff0c;一个下载的RPM包会保存在下面的目录中: /var/cache/yum/x86_64/[centos/fe…

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

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