当前位置: 首页 > news >正文

【教程】Kotlin语言学习笔记(二)——数据类型(持续更新)

文首标志
写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!


【Kotlin语言学习】系列文章

第一章 《认识Kotlin》
第二章 《数据类型》


文章目录

  • 【Kotlin语言学习】系列文章
  • 一、基本数据类型
    • (一)整数类型
    • (二)浮点类型
    • (三)字符类型
    • (四)布尔类型
  • 二、字符串
    • (一)字符串定义
    • (二)字符串模板
    • (三)字符串拼接
    • (四)字符串转义
  • 三、类型强制转换
  • 四、数学运算
    • (一)常见运算
    • (二)位运算


一、基本数据类型

(一)整数类型

在 Kotlin 中,整数类型表示整数值。Kotlin 提供了多个整数类型,以便根据需求选择合适的类型。

类型关键字位宽最小值最大值
字节型Byte8-128127
短整型Short16-3276832767
整型Int32-2^312^31-1
长整型Long64-2^632^63-1

在计算机当中,最小的数据存储单位就是位(Bit),而所有数字在储存的时候,都是二进制储存,而二进制中,8位称之为1个字节(Byte),位宽则是数据占用的位的总数。可以看到,不同的数据类型就占用了不同的位宽。
下面是对各种整数类型的变量声明示例。

val number = 100 // 默认是Int类型
val bigNumber = 8000000000 // 超过Int最大值,默认为Long类型
val longNumber = 20L // 在赋值数字后面增加后缀L声明Long类型
val byteNumber:Byte = 1 //在变量后用冒号声明Byte类型,再进行赋值

值得注意的是,所有未超过Int最大值的整型值初始化的变量都默认为Int类型,如果初始值超过了其最大值,那么将推断为Long类型。

(二)浮点类型

在 Kotlin 中,浮点类型表示带有小数部分的数字。Kotlin 提供了两种浮点类型:Float 和 Double。

类型关键字位宽
浮点型Float32
双精度浮点型Double64

下面是对两种浮点数类型的变量声明示例。

val defaultDouble = 3.14 // 输入小数默认为Double类型
val doubleNumber = 3.1415926535 // 小数位超过6位也默认是Double类型
val floatNumber = 3.1415926535f // 在赋值数字后面增加后缀f声明Float类型

Kotlin对于小数的默认推断是Double类型。如果需要显式地将一个小数指定为Float类型,则需要在数值尾部加入f或者F的字母后缀。由于Float类型十进位数是6位,所以上述示例中floatNumber实际值大小为3.1415927,后面就会出现进度丢失舍弃。

(三)字符类型

在 Kotlin 中,字符类型表示单个字符。Kotlin 使用 Char 类型来表示字符。Char 类型是一个 16 位的无符号整数,可表示 Unicode 字符。

要声明一个字符变量,可以使用 char 或者 Char 关键字,并使用单引号''将字符括起来。

val letter: Char = 'A'// 用单引号括起来的单个字符

(四)布尔类型

在 Kotlin 中,布尔类型用于表示逻辑值。Kotlin 提供了一个 Boolean 类型,只有两个可能的取值:truefalse

val isVisible0:Boolean = false// 布尔值中的假,返回0
val isVisible1:Boolean = true// 布尔值中的真,返回1

二、字符串

在 Kotlin 中,String 被视为引用类型,并且不属于基本数据类型。然而,由于 Kotlin 对于基本数据类型提供了很多方便的语法和操作符,使得它们在使用上更接近于原始类型。在 Kotlin 中,这些基本数据类型具有与引用类型类似的行为,并且享受了编译器对它们的多态优化。

String 类型是不可变的,也就是说,一旦创建了一个字符串对象,就不能对其进行修改。如果需要修改字符串,可以使用字符串的一些方法和操作符来创建新的字符串对象。

(一)字符串定义

要声明一个字符串变量,可以使用 String 关键字,并使用双引号""将字符串括起来。

val str:String = "1234567890"

由于字符串String被视为引用类型,就可以通过[]引用来访问字符串中具体的某个字符。

val str:String = "1234567890"
val strNumber2:Char = str[1]// 元素计数从0开始,1即代表第二个
println("strNumber2:"+strNumber2)

通过println可以打印出strNumber2的结果。返回结果如下。

strNumber2:2

由此可以确定,通过访问具体的元素,可以从字符串中单独取出并输出。

(二)字符串模板

字符串字面值可以包含模板表达式,即一些小段代码,会求值并把结果合并到字符串中。模板表达式以美元符$开头,有一个简单的名字构成。

val number = 100
println("The result is $number")

返回结果如下。

The result is 100

不仅是简单的变量名,使用${}括起来的任意表达式都能够在字符串中被识别为代码输出。

val text = "This is text"
println("Text length is ${text.length}")

其中,text.length是访问了text的衡量长度方法,可以得到变量的长度。
返回结果如下。

Text length is 12

同时,字符串与转义字符串内部都支持模板,如果需要在原始字符串中表示字面值美元符$,则可以使用下列语法。

val price = "${'$'}9.99 "

输出结果如下。

$9.99

(三)字符串拼接

Kotlin的字符串可以使用加法操作符+实现字符串的拼接,不仅适用于连接字符串和字符串,同时也支持连接字符串与其他类型的值。

println("I am " + 10 + " years old!")

返回结果如下。

I am 10 years old!

(四)字符串转义

Kotlin有两种类型的字符串字面值:转义字符串可以有转义字符,以及原始字符串可以包含换行以及任意文本。转义字符有以下用法:

  • 使用\n换行
  • 使用反斜杠\对双引号""进行转义
  • 使用三个引号即分界符"""将内部任何字符转换为字符串,还可以通过使用trimMargin()函数去除前导空格

具体示例如下。

println("Hello\nWorld!")// \n换行 
println("He says:\"Yes!\"")// \反斜杠转义双引号 
println("""val number = 1val char = 'c'""".trimIndent()
)// 分界符内部没有转义并且可以包含换行以及其他任何字符

返回结果如下。

Hello
World!
He says, “Yes!”
val number = 1
val char = ‘c’

三、类型强制转换

数据类型之间可以通过调用toType()方法来强行转换类型。

转换类型方法
BytetoByte()
ShorttoShort()
InttoInt()
LongtoLong()
FloattoFloat()
DoubletoDouble()
ChartoChar()
StringtoString()

示例如下。

val before:Int = 100
println("transform to string:${before.toString()}")

返回结果如下。

transform to string:100

四、数学运算

(一)常见运算

在 Kotlin 中,支持以下常见的算术运算符:

符号名称作用
+加法运算符用于执行两个操作数的相加运算
-减法运算符用于执行两个操作数的相减运算
*乘法运算符用于执行两个操作数的相乘运算
/除法运算符用于执行两个操作数的相除运算
%取模运算符用于获取两个操作数相除后的余数
++自增运算符用于将操作数的值增加1
--自减运算符用于将操作数的值减少1

(二)位运算

Kotlin中的位运算采用了中缀函数方式调用具名函数。

使用名称描述示例
and&位与对两个二进制数的对应位进行与操作,只有当两个位都为1时,结果位才为1a and ba & b
or|位或对两个二进制数的对应位进行或操作,只有当至少一个位为1时,结果位才为1a or ba | b
xor^位异或对两个二进制数的对应位进行异或操作,只有当两个位不相同时,结果位才为1a xor ba ^ b
inv位非对一个二进制数的每个位取反,0 变为 1,1 变为 0inv(a)!a
shl<<左移将一个二进制数的所有位向左移动指定的位数,左侧的位将被丢弃,右侧空出的位用0填充a shl ba << b
shr>>右移将一个二进制数的所有位向右移动指定的位数,右侧的位将被丢弃,左侧空出的位用符号位填充(对于正数用0填充)a shr ba >> b
ushr>>>无符号右移将一个二进制数的所有位向右移动指定的位数,右侧的位将被丢弃,左侧空出的位用0填充a ushr ba >>> b

我是EC,一个永远在学习中的探索者,关注我,让我们一起进步!

文末标志

相关文章:

【教程】Kotlin语言学习笔记(二)——数据类型(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 第二章 《数据类型》 文章目录 【Kotlin语言学习】系列文章一、基本数据…...

react 插槽

问题开发当中会经常出现组件十分相似的组件&#xff0c;只有一部分是不同的 解决&#xff1a; 父组件:在引用的时候 import { Component } from "react"; import Me from "../me";const name <div>名称</div> class Shoop extends Compone…...

Linux运用fork函数创建进程

fork函数&#xff1a; 函数原型&#xff1a; pid_t fork(void); 父进程调用fork函数创建一个子进程&#xff0c;子进程的用户区父进程的用户区完全一样&#xff0c;但是内核区不完全一样&#xff1b;如父进程的PID和子进程的PID不一样。 返回值&#xff1a; RETURN VALUEO…...

Pytest测试技巧之Fixture:模块化管理测试数据

在 Pytest 测试中&#xff0c;有效管理测试数据是提高测试质量和可维护性的关键。本文将深入探讨 Pytest 中的 Fixture&#xff0c;特别是如何利用 Fixture 实现测试数据的模块化管理&#xff0c;以提高测试用例的清晰度和可复用性。 什么是Fixture&#xff1f; 在 Pytest 中&a…...

设计模式-职责链模式Chain of Responsibility

职责链模式 一、原理和实现二、实现方式1) 使用链表实现2) 使用数组实现3) 扩展 作用&#xff1a;复用和扩展&#xff0c;在实际的项目开发中比较常用。在框架开发中&#xff0c;我们也可以利用它们来提供框架的扩展点&#xff0c;能够让框架的使用者在不修改框架源码的情况下&…...

书生浦语大模型实战营-课程作业(3)

下载sentence_transformer的代码运行情况。sentence_transformer用于embedding&#xff08;转向量&#xff09; 本地构建持久化向量数据库。就是把txt和md文件抽取出纯文本&#xff0c;分割成定长&#xff08;500&#xff09;后转换成向量&#xff0c;保存到本地&#xff0c;称…...

考研英语单词25

Day 25 bench n.长凳 elastic n.橡皮圈&#xff0c;松紧带 a.灵活的 “e-last 延伸出去” disaster n.灾难&#xff0c;灾祸【disastrous a.灾难性的&#xff0c;极坏的】 deadly a.致命的&#xff0c;极端的&#xff0c;势不两立的 hike n.徒步旅行&…...

计算机网络——08应用层原理

应用层原理 创建一个新的网络 编程 在不同的端系统上运行通过网络基础设施提供的服务&#xff0c;应用进程批次通信如Web Web服务器软件与浏览器软件通信 网络核心中没有应用层软件 网络核心没有应用层功能网络应用只能在端系统上存在 快速网络应用开发和部署 网络应用…...

面试计算机网络框架八股文十问十答第五期

面试计算机网络框架八股文十问十答第五期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;与缓存相关的HTTP请…...

拟合案例1:matlab积分函数拟合详细步骤及源码

本文介绍一下基于matlab实现积分函数拟合的过程。采用的工具是lsqcurvefit和nlinfit两个函数工具。关于包含积分运算的函数,这里可以分为两大类啊。我们用具体的案例来展示:一种是积分运算中不包含这个自变量,如下图的第一个公式,也就是说它这个积分运算只有R和Q这两个待定…...

嵌入式软件设计入门:从零开始学习嵌入式软件设计

&#xff08;本文为简单介绍&#xff0c;个人观点仅供参考&#xff09; 首先,让我们了解一下嵌入式软件的定义。嵌入式软件是指运行在嵌入式系统中的特定用途软件,它通常被用来控制硬件设备、处理实时数据和实现特定功能。与桌面应用程序相比,嵌入式软件需要具备更高的实时性、…...

Educational Codeforces Round 135 (Rated for Div. 2)C. Digital Logarithm(思维)

文章目录 题目链接题意题解代码 题目链接 C. Digital Logarithm 题意 给两个长度位 n n n的数组 a a a、 b b b&#xff0c;一个操作 f f f 定义操作 f f f为&#xff0c; a [ i ] f ( a [ i ] ) a [ i ] a[i]f(a[i])a[i] a[i]f(a[i])a[i]的位数 求最少多少次操作可以使 …...

微信小程序介绍、账号申请、开发者工具目录结构详解及小程序配置

目录 一、微信小程序介绍 1.什么是小程序&#xff1f; 2.小程序可以干什么&#xff1f; 3.微信小程序特点 二、账号申请 1.账号注册 2.测试号申请 三、安装开发工具 四、开发小程序 五、目录结构 JSON 配置 小程序配置 app.json 工具配置 project.config.json 页…...

数字的魅力之情有独钟的素数

情有独钟的素数 什么是素数 素数&#xff08;Prime number&#xff09;也称为质数&#xff0c;是指在非0自然数中&#xff0c;除了1与其本身之外不拥有其他因数的自然数。也就是说&#xff0c;素数需要满足两个条件&#xff1a; 大于1的整数&#xff1b;只拥有1和其自身两个…...

Vue2源码梳理:render函数的实现

render 在 $mount 时&#xff0c;会调用 render 方法在写 template 时&#xff0c;最终也会转换成 render 方法Vue 的 _render 方法是实例的一个私有方法&#xff0c;它用来把实例渲染成一个虚拟 Node它的定义在 src/core/instance/render.js 文件中&#xff0c;它返回的是一个…...

flask+python企业产品订单管理系统938re

在设计中采用“自下而上”的思想&#xff0c;在创新型产品提前购模块实现了个人中心、个体管理、发布企业管理、投资企业管理、项目分类管理、产品项目管理、个体投资管理、企业投资管理、个体订单管理、企业订单管理、系统管理等的功能性进行操作。最终&#xff0c;对基本系统…...

Vue2源码梳理:关于数据驱动,与new Vue时的初始化操作

数据驱动 1 &#xff09;概述 vue的一个核心思想&#xff0c;就是数据驱动 所谓数据驱动&#xff0c;就是指视图是由数据驱动生成的 对视图的修改并不会直接操作dom&#xff0c;而是通过修改数据 它相比我们传统的前端开发&#xff0c;如使用 jQuery 的前端库直接去修改 dom…...

【C++航海王:追寻罗杰的编程之路】关于模板,你知道哪些?

目录 1 -> 泛型编程 2 -> 函数模板 2.1 -> 函数模板概念 2.2 -> 函数模板格式 2.3 -> 函数模板的原理 2.4 -> 函数模板的实例化 2.5 -> 函数参数的匹配原则 3 -> 类模板 3.1 -> 类模板的定义格式 3.2 -> 类模板的实例化 1 -> 泛型编…...

分布式springboot 3项目集成mybatis官方生成器开发记录

文章目录 说明实现思路实现步骤第一步&#xff1a;创建generator子模块第二步&#xff1a;引入相关maven插件和依赖第三步&#xff1a;编写生成器配置文件第四步&#xff1a;运行查看结果 说明 该文章为作者开发学习记录&#xff0c;方便以后复习和交流主要内容为&#xff1a;…...

算法学习——LeetCode力扣回溯篇4

算法学习——LeetCode力扣回溯篇4 332. 重新安排行程 332. 重新安排行程 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...