《Kotlin入门实战》CH3 | 类型系统与可空类型

Kotlin协程高并发服务器:四种核心模式与性能优化实战 并发编程是现代服务端开发的核心技术,通过合理利用计算资源提升系统吞吐量。Kotlin协程基于挂起函数和状态机机制,在用户态实现轻量级线程切换,避免了传统线程模型的内存开销和上下文切换成本。这种非阻塞并发模型特别适合I/O密集型场景,能够显著提升资源利用率和系统性能。在实际工程实践中,开发者需要掌握每请求一协程、生产者-消费者等核心模式,并注意调度器选择和资源管理。针对高并发服务器场景,Kotlin协程提供了结构化并发和背压处理等机制,帮助构建稳定高效的服务端应用,解决传统多线程模型在应对高并发请求时的性能瓶 阅读详情

类型系统与可空类型

Kotlin属于静态类型编程语言,编程语言中类型系统定义:

  1. 如何将数值和表达式归为不同类型

  2. 如何操作这些类型

  3. 这些类型之间如何相互作用

类型系统

1. 类型系统作用

  1. 让编译器检查无意义、无效、类型不匹配的错误代码

  2. 代码更好读懂

  3. 利于抽象 char[] str = {'a','b','c'}抽象为String str = 'abc',也就是char[] 到 String的抽象。

2. Java类型系统

  1. Java中类型分为基础类型和引用类型。

  2. 8大基础类型,在使用的时候,内存是分配在栈上的。不能在泛型中使用基础类型,基础类型不能为null。

  3. 引用类型,内存分配在堆上。泛型中可以使用,可以为null。

基础类型基于栈分配内存速度快,使用上方便(不用new),但一定程度上破坏了面向对象思想3.

3. Kotlin的类型系统

8923455-a980a8ac0c1c57a9.png
image.png

通过显示声明可空类型,可以在编译器减少NullPointerException

KotlinJava
Intint
Int?Integer
Longlong
Long?Long
......

Java中基础类型可以自动装箱成对应的包装类型,包装类型也可以拆箱为基础类型。同理Kotlin中可空类型和非空类型之间也可以装箱拆箱。拆箱会在编译器完成,也就是说都是使用栈内存。


8923455-af4918cefffa05ef.png
image.png

书上写 Int?之间‘===’返回的是false,但是测试了返回依然是true。

8923455-27f4d815cf15152a.png
image.png

换个测试方法,如上如,返回的又是false了。

我的乖乖,这是啥子操作。装箱拆箱这一块参考>https://blog.youkuaiyun.com/fzhhsa/article/details/83278321

在范围是 [-128, 127] 之间的数装箱时并不会创建新的对象,所以这里a1和a2装箱后的对象是同一个,a1 === a2也就返回true了。这里改为128或-129就又会变成false了。

对于数组,java中的类型是T[],Kotlin中使用Array代表数组类型

8923455-aa0981e737e68fed.png
image.png

可空类型

为了避免不必要的空指针异常,kotlin使用了Elvis运算符替代Java8的Optional

fun strLength(s : String?) : Int{
    return s?.length ?:0 // ?.是安全调用符, ?:是Elvis从操作符
}

特殊类型

Unit、Any、Nothing及其对应的可空类型Unit!、Any!、Nothing!

  • Unit对应Java中的Void,函数返回值为Unit的时候可以省略。
8923455-6cb493210b8694c8.png
  • Nothing,Java中void的包装类Void,在Android的AsyncTask中使用到了,用于泛型中可能返回的Void。Void对应Kotlin中的Nothing?,唯一可能的值是null。
8923455-64f637082505a4e3.png

Nothing类的定义构造器是私有的,如果使用Nothing作为返回值,将抛出异常。Unit与Nothing之间的区别是,Unit类型表达式计算结果的返回 类型是Unit; Nothing类型的表达式计算结果是永远不会返回的(与 Java中的void相同)。
Nothing?在使用的时候只能被赋值为null,

  • Any,Any是不可空类型的根,Any?是可空类型的根。
8923455-e430886e79cc3857.png

类型检测和类型转换

类型检测

is运算符相当于java中的instanceof

    fun test5(){
        var f = Father()
        var s = Son()
        var fs :Father = s

        println(f is Father)  // true
        println(s is Father)  // true, 子类对象 is 父类类型
        println(fs is Son)    // true,  父类引用(子类对象) is 子类类型
    }

类型转换

在Java代码中,当我们使用str instanceof String来判断其值为true的时候,我们想使用str变量,还需要显式地强制转换类型:

8923455-aa1e2ef9dde8bdbd.png

而在Kotlin中不需要这么做,编译器会帮你解决

    @Test
    fun test6(){
        val any : Any = "hhh"
        if(any is String)
            println(any.length)
        else if(any is Number)
            println(any.toString().length)
        else if(any is Boolean)
            println(1)
        else
            println("Not a String")
    }

as运算符

    @Test
    fun test5(){
        var f = Father()
        val s = Son()
        val fs :Father = s
        val sf : Son = fs as Son  // 父类引用的子类对象转化为子类引用
    }
Kotlin与Java的相互调用 Kotlin调用java public class MyJavaClass{ public static MyJavaClass object = new MyJavaClass(); @Override public String toString(){ return "MyJavaClass{}"; } } kotlin fun main(args: Array<String>){ //需要加反引用符号,!左侧的按键 阅读详情

相关推荐

隔离型全桥LLC谐振变化器建模及参数设计资料【仿真+设计报告+计算书】

内容概要:本文档系统性地提供了隔离型全桥LLC谐振变换器的建模、仿真与参数设计全套技术资料,涵盖Simulink/Plecs仿真模型、详细设计报告及Mathcad计算书,内容涉及开环与闭环控制、软启动过程、恒压恒流双闭环竞争控制等多种工况。资料还拓展至多相交错LLC、双向CLLC拓扑以及V2G(Vehicle-to-Grid)电动汽车充放电等前沿应用场景,并融合状态估计算法(如卡尔曼滤波、扩展卡尔曼滤波、粒子滤波)与神经网络技术进行系统性能优化,配套PPT说明与高水平EI期刊复现案例,为电力电子领域的科研与工程设计提供完整的技术支撑; 适合人群:适用于电力电子、电气工程及其自动化等相关专业的高校研究生、科研人员,以及从事高频DC-DC变换器、新能源电源系统开发的工程师,具备扎实电路理论基础和Matlab/Simulink仿真能力者尤佳; 使用场景及目标:①支撑LLC谐振变换器相关的科研课题、学位论文或项目开发;②开展高频高效电源的参数设计、效率优化与动态响应分析;③学习并复现高水平期刊中先进的控制策略,如变频控制、混合移相控制及智能优化算法;④掌握Simulink/Matlab在电力电子系统建模、控制算法实现与状态估计中的综合应用; 阅读建议:建议结合仿真模型、Mathcad计算书与设计报告三位一体同步研习,重点理解主电路参数设计与闭环控制逻辑之间的耦合关系,优先运行典型算例并调试关键模块,有条件者可进一步推进至硬件原型验证,并积极探索状态估计与人工智能算法在电力系统动态建模中的融合应用。

《Kotlin入门实战》CH2 | Kotlin 语法基础

写在前面 kotlin 为啥用fun声明方法? JetBrains : We use “fun” because we like it - and yes, we do know what the word means in English. JVM语言生态 需要注意的式Kotlin是基于JVM的语言,而不是基于Java的语言,他们都可以翻译成Class字节码。 kotlin ...

落红不是无情物 218

springcloud+nacos+gateway+oauth2小聚会

在微服务工程中,Nacos作为目前主流的注册中心和配置中心,Spring Cloud Gateway作为目前主流的网关,下面引入spring security+oauth2+jwt作为认证和授权中心,进行简单的聊聊。

ldcaws的专栏 2646

《Kotlin入门实战》CH5 | 函数与函数式编程

函数与函数式编程 函数式编程与命令式编程最大的不同是:函数式编程的焦点在于数据的映射,命令式编程(imperative programming)的焦点是解决问题的步骤。 函数式编程和命令式编程比较 fun main() { val list = listOf<Int>(1, 2, 3, 4, 5) // 函数式编...

落红不是无情物 202

xsens IMU配置

1.安装驱动 sudo apt-get update sudo apt-get install ros-kinetic-xsens-driver 2.配置IMU 设置输出四元数,加速度、角速度、地磁 cd /opt/ros/kinetic/lib/xsens_driver python mtdevice.py --configure "oq,aa,wr,mf" 3.启动IMU roslaunch xsens_driver xsens_driver.launch 转(https://www.cnblo

qq_41585680的博客 2325

Python爬虫实战:用Selenium+ChromeDriver批量抓取政府网站政策文件(附完整代码)

本文详细介绍了使用Python的Selenium和ChromeDriver进行政府网站政策文件批量抓取的实战技巧。从环境配置、动态页面元素定位到分页机制破解和反爬虫策略,提供了完整的解决方案和代码示例,帮助开发者高效获取结构化政策数据。

weixin_42531710的博客 265

《Kotlin入门实战》CH7 | 集合类

集合类 在Java类库中有一套相当完整的容器集合类来持有对象。Kotlin没有去重复造轮子(Scala则是自己实现了一套集合类框架),而是在Java类库的基础上进行了改造和扩展,引入了不可变集合类,同时扩展了大量方便实用的功能,这些功能的API都在kotlin.collections包下面。 集合类概述 集合层次 Iterable 可遍历...

落红不是无情物 168

用PyTorch复现经典:手把手教你用Double DQN训练AI玩转打砖块(附完整代码与调参心得)

本文详细介绍了如何使用PyTorch实现Double DQN算法,训练AI智能体玩转经典雅达利游戏Breakout(打砖块)。从环境配置、帧预处理到网络架构设计和经验回放机制,全面解析了强化学习在游戏AI中的应用。文章还提供了关键调参技巧和实战优化方案,帮助开发者快速掌握Double DQN的核心实现与性能优化方法。

weixin_30596165的博客 229

《Kotlin入门实战》CH6 | 扩展函数与扩展属性

扩展函数与属性 在Java中获取String中的第一个字符,StringUtil.firstChar(str)可能是这样写的,但是要想`"ABC".firstChar()是不可能的,因为Java中String是final类,在Kotlin中就不一样了。 1. 扩展函数 给String类中添加firstChar方法 fun String.firstChar(...

落红不是无情物 179

cst使用局部网格加密,手动加密,special设置等方法合理网格布局加速仿真速度

在CST中,计算复杂模型或者阵列的时候往往需要耗费大量仿真时间,除了使用更高性能的电脑或工作站进行仿真,合理对CST的仿真网格进行适当设置也是必不可少的一步。CST中网格设置影响模拟的精度和速度,因此花时间理解网格过程是很重要的。

OVEN_b612的博客 1万+

大数据分析案例-基于随机森林模型对北京房价进行预测

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬勃起来。同时,随着社会经济的快速开展,居民的经济条件越来越好,住房条件也在不断地提升。而住房是人民根本生活的保障,也是-一个家庭最重要的资产,从一定的层面.上反映了一个家庭整体的生活水王,多方面的因素使得房地产行业在短时间开展成为我国的支柱产业之一;成为了切实关乎人民生活和利益的重要产业。然而,随着房地产行业的开展,问题也慢慢突显出来,房价一直居高不下成为了一个大问题。 作为国家的支柱产业,房地产的稳定发展关乎国计民生。近几年,房

m0_64336780的博客 8827

《Kotlin入门实战》CH4 | 类与面向对象编程

类与面向对象编程 从面向过程到面向对象,再到设计模式,架构设计,面向服务,Sass、Pass和Iass等思想,各种软 件理论思想五花八门,但万变不离其宗: 你要解决一个什么样的问题? 你的问题是哪个领域的? 你的模型(数据结构)是什么? 你的算法是什么? 你对这个世界的本质认知是怎样的? 你的业务领域的逻辑问题、流程是什么? 声明类 1. 空类 2. ...

落红不是无情物 186

SAP 业务技术平台(BTP) Workflow(工作流)功能介绍

这背后其实发生了很多事情:Workflow 应用里 Determine Equipment Service Task 得到执行,通过 HTTP POST,消费部署在 SAP BTP 上的 Business Rules Service,后者根据我们在 Start New Instance 里传入的 Sample Data,返回自动决定出的设备明细。关于这个 SAP BTP 开发工具的更多介绍,参考我的文章:SAP 新一代全栈开发工具:SAP Business Application Studio.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 8752

《Kotlin入门实战》CH9 | 文件IO,正则和多线程

文件IO,正则和多线程 得益于kotlin的扩展函数,kotlin对java中api进行了改进,对于java中好用的api直接使用,对于不好用的api进行了扩展和改进。 1 文件IO操作 读写 fun main() { val f = File("test.txt") // 写入文件 f.writeText("hello kotl...

落红不是无情物 278

在Android Jetpack Compose中实现夜间模式

Android基于Compose的深色主题实现

虎哥LoveDroid 1235

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

《Kotlin入门实战》CH8 | 泛型

泛型 泛型是在Java5中引入的,泛型让集合框架可以重用代码,在没有泛型时候,集合框架中存储数据的类型都是Object,也就是说存入和取出数据都需要对对象进行强制类型转换。这就很可能出现错误。 1 类接口函数上使用泛型 泛型接口 interface Send<T>{ fun handleMessage(t : T) : T; } fu...

落红不是无情物 164

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

使用官方 kotlin-sdk 构建 MCP 服务器:Kotlin MCP Server Development Expert 实战指南

在 awesome-copilot 仓库中,[agents/kotlin-mcp-expert.agent.md](https://link.gitcode.com/i/2f7f80456d37562744b8f84f38580d49) 定义了一位专注于"用官方 `io.modelcontextprotocol:kotlin-sdk` 构建 Model Context Protocol(MCP)服

gitblog_00373的博客 231

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Obsidian Git 大 Vault 提速的 3 条路径:obsidian-git 性能优化完整指南

你的 Obsidian Vault 笔记上千、附件成堆,装了 obsidian-git 之后,commit-and-sync 越来越慢,Source Control 视图动不动就卡住?这篇指南带你用 3 条路径逐级优化:从改插件设置到瘦身仓库,把文件改动后的列表刷新从"秒级等待"压回毫秒级,行作者信息(git blame)也能秒出。 ## 先自查:5 个典型症状对号入座 优化前先定位问题:卡顿

gitblog_01131的博客 1045

React ref 转发(forwardRef)设计全解析:基于 React RFC 0030 的动机、实现与替代方案

本篇文章以 React 官方 RFC 仓库中的 [text/0030-ref-forwarding.md](https://link.gitcode.com/i/3b33a67178550b68426721081c122f2d) 为骨架,系统梳理 `React.forwardRef` 这一 API 的诞生背景、设计动机、完整用法、底层实现思路与备选方案。读完本文,你将理解为什么 ref 无法像普通

gitblog_00331的博客 150

CH34xUART 1.0.0 安卓库集成实战:适配Android 13,修复3个关键Bug

本文详细介绍了CH34xUART 1.0.0安卓库的集成实战,重点讲解了如何适配Android 13并修复3个关键Bug。内容涵盖现代Android开发环境配置、USB权限管理、串口参数设置以及性能优化技巧,帮助开发者高效实现USB串口通信功能。

weixin_30603633的博客 388

Java中也能用Kotlin断言库?Atrium Java互操作完整指南

**Atrium** 是一个面向 Kotlin 的多平台断言/期望(expectation)库,支持 JVM、JS 和 Android。对拥有 Java 代码的开发者来说,Atrium 的 Java 互操作能力尤其值得关注:它既能帮你优雅地测试 Java 类型的返回值,又原生支持 Java 9+ 的模块系统(JPMS)。本文就是这份 **Atrium Java 互操作完整指南**,带你快速上手。?

gitblog_00573的博客 444

google-drive-ocamlfuse 的 libfuse 3 绑定升级实录:从 ocamlfuse 到 fuse3 的四阶段迁移

本文基于仓库内的迁移计划文档 [docs/plans/fuse3-dependency-upgrade.md](https://link.gitcode.com/i/e5b4ee8e6031d53fd1dec9648828956d),完整复盘 google-drive-ocamlfuse 如何把 FUSE 绑定从 libfuse 2 的 `ocamlfuse` 包切换到 libfuse 3 的 `

gitblog_01150的博客 345

《离线AI安卓APP》ch03 Kotlin 速成(只学这个项目用到的)

学习目标 读完本章,你应当能够: 说清 val 和 var 的区别,以及为什么本工程默认全用 val; 读懂并写出空安全三件套 ? / ?. / ?:,并解释为什么本工程几乎不用 !!; 用 data class + copy() 做"不可变更新",并说清它和"原地改列表"对 UI 刷新的影响;

ai2work的博客 953

Java/Kotlin TCP Socket TLS/SSL加密通讯实战指南

在网络编程中,TCP Socket是实现客户端与服务器端稳定双向通讯的基础技术。然而,明文传输的数据在公网环境中面临被截获和窃取的风险,因此数据加密成为保障通讯安全的核心原理。TLS/SSL协议作为业界标准,通过非对称加密进行密钥交换、对称加密保障传输效率,并利用数字证书实现身份认证,为数据传输提供了机密性、完整性和可信性三重保障。这一技术价值在于,它能有效防止中间人攻击和数据泄露,是构建安全网络应用的基石。在Java/Kotlin开发实践中,通过SSLSocket和SSLServerSocket可以便捷地

weixin_33845881的博客 527

学习笔记-Kotlin(3)

目录 1.字符串操作 2.数字类型 3.标准函数库 (1).apply (2).let (3).run (4).with (5).also (6).takeIf和takeUnless 1.字符串操作 indexOf():用法跟java相同 substring():字符串截取。跟java相同,但其中有一种用法是subString(range:Int) "frenk".su......

FrenkX72的博客 653

SpringBoot引入海康CH-HCNetSDKV IllegalArgumentException: LoggerFactory is not a Logback LoggerContext

SpringBoot引入海康CH-HCNetSDKV6.1.6.45 项目运行bug解决。Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath.

简介 2123
上一篇: 《Kotlin入门实战》CH2 | Kotlin 语法基础
下一篇: 《Kotlin入门实战》CH4 | 类与面向对象编程
KriyWu
博客等级 码龄9年 3粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值