【Kotlin】Kotlin基本数据类型

1 变量声明

var a : Int // 声明整数类型变量
var b : Int = 1 // 声明整数类型变量, 同时赋初值为1
var c = 1 // 声明整数类型变量, 同时赋初值为1
val d = 1 // 声明整数类型常量, 值为1(后面不能改变d的值)

        变量命名规范如下。

  • 变量名可以由字母、数字、下划线(_)和美元符号($)组成,但是不能以数字开头,且大小写敏感。
  • 不能有空格、@、#、+、-、/ 等符号。
  • 应该使用有意义的名称,达到见名知意的目的,最好以小写字母开头。
  • 不能与 Kotlin 语言的关键字或是基本数据类型重名。

2 基本数据类型

2.1 空类型

        Kotlin 中空类型使用 Unit 表示,等价与 Java 中的 void。

        1)Unit 的定义

public object Unit {override fun toString() = "kotlin.Unit"
}

        2)Unit 作为变量使用

fun main() {var a : Unit = Unitprintln(a) // kotlin.Unit
}

        3)Unit 作为函数返回值使用

fun myFun() : Unit {println("定义一个没有返回值的函数")
}

        说明:当函数无返回值时,可以省略 Unit。

2.2 数字类型

2.2.1 整数类型

类型大小(位)最小值最大值案例
Byte8-128127

var a: Byte = 1

var a = 1

val a = 0b1001 // 二进制

val a = 0xAF // 十六进制

Short16-3276832767

var a: Short = 1

var a = 1

Int32

-2,147,483,648

(-2^31)

2,147,483,648(2^31-1)

var a: Int = 1

var a = 1

var a = 1_000_000

Long64-9,223,372,036,854,775,808(-2^63)

9,223,372,036,854,775,807

(2^63-1)

var a: Long = 1L

var a = 1L

UByte80255

var a: UByte = 1u

var a = 1u

UShort16065535

var a: UShort = 1u

var a = 1u

UInt320

4,294,967,295

(2^32-1)

var a: UInt = 1u

var a = 1u

ULong640

18,446,744,073,709,551,615

(2^64-1)

var a: ULong = 1uL

var a = 1uL

var a = 0xFFF_FFF_FFFuL 

        进制表示如下。

// 二进制
val a = 0b1001 // 0b是二进制前缀, 1001对应十进制的9// 十六进制
val a = 0xAF // 0x是十六进制前缀, AF对应十进制的31

        注意:Kotlin 没有八进制前缀表示。

2.2.2 浮点类型

类型大小(位)

符号位(S)/

阶码(E)/

尾数(M)

最小值/

最大值/

最小正数

有效位数案例
Float321S + 8E + 23M

-3.4028235E38

3.4028235E38

1.4E-45

6

var a: Float = 1.0F

var a = 1.0F

var a = 1.0f

Double641S + 11E + 52M

-1.7976931348623157E308

1.7976931348623157E308

4.9E-324

15

var a: Double = 1.0

var a = 1.0

        浮点数编码原理详见 → 浮点数编码原理。

2.2.3 运算符

运算符描述作用域优先级案例
+加法整数/浮点数

作为一元运算符时,优先级为1

作为二元运算符时,优先级为3

1 + 2 = 3

-减法整数/浮点数

作为一元运算符时,优先级为1

作为二元运算符时,优先级为3

1 - 2 = -1
*乘法整数/浮点数22 * 3 = 6
/整除/除法整数/浮点数2

3 / 2 = 1

3.0 / 2 = 1.5

3 / 2.0 = 1.5

%取余整数/浮点数27 % 3 = 1
++加1整数/浮点数1

a++(先使用, 后加1)

++a(先加1, 后使用)

--减1整数/浮点数1

a--(先使用, 后减1)

--a(先减1, 后使用)

=赋值所有类型9a = 1
+=

加赋值

整数/浮点数9a += 1 ⇔ a = a + 1
-=减赋值整数/浮点数9a -= 2 ⇔ a = a - 2
*=乘赋值整数/浮点数9a *= 3 ⇔ a = a * 3
/=除赋值整数/浮点数9a /= 4 ⇔ a = a / 4
%=取余赋值整数/浮点数9a %= 5⇔ a = a % 5
shl有符号左移Int/Long4

3 shl 1 = 6

-1 shl 1 = -2

-3 shl 1 = -6

shr有符号右移Int/Long4

3 shr 1 = 1

-1 shr 1 = -1

-3 shr 1 = -2

ushr无符号右移Int/Long4

3 ushr 1 = 1

-1 ushr 1 = 2147483647

-3 ushr 1 = 2147483646

and按位与Int/Long5

// 1001 and 0011 = 0001

9 and 3 = 1

or按位或Int/Long6

// 1001 or 0011 = 1011

9 or 3 = 11

xor按位异或Int/Long7

// 1001 xor 0011 = 1010

9 or 3 = 10

inv按位取反Int/Long1

9.inv() = -10

(-1).inv() = 0

(-3).inv() = 2

..闭区间整数8

1..4 // 1, 2, 3, 4

..<左开右闭区间整数81..<4 // 1, 2, 3
until左开右闭区间整数81 until 4 // 1, 2, 3

2.3 布尔类型

2.3.1 布尔类型

类型大小(位)取值案例
Boolean1true / false

var a: Boolean = true

var a = false

2.3.2 运算符

运算符描述作用域优先级案例
==等于整数/布尔/字符

1

1 == 2 // false

1 == 1 // true

!=不等于整数/布尔/字符

1

1 != 2 // true

1 != 1 // false

<小于整数/浮点数/字符11 < 2 // true
>大于整数/浮点数/字符1

1 > 2 // false

<=小于等于整数/字符11 <= 2 // true
>=大于等于整数/字符11 >= 2 // false
in在范围内整数/字符13 in 1..9 // true
!in不在范围内整数/字符13 !in 1..9 // false
!布尔2

!true // false

!false // true

&&布尔3true && false // false
||布尔4true || false // true

2.4 字符类型

2.4.1 字符类型

类型大小(位)案例
Char16

var a: Char = ‘A’

var a = 'A'

var a = '好'

var a = '\u725B' // 牛

var a = Char(66) // B

var a = 'A' + 4 // E

'A'.code // 65

2.4.2 转义字符

\t —— Tab制表符
\b —— 退格
\n —— 换行(LF)
\r —— 回车(CR)
\' —— 单引号
\" —— 双引号
\\ —— 反斜杠
\$ —— 美元符号

2.5 字符串类型

2.5.1 字符串的定义

var str1 : String = "abc"
var str2 = "abc"
var str3 = "abc" + "def" // "abcdef"
// 原始字符串
var str4  = """第一行第二行第三行"""
// 字符串模板
var count = 15
var str5 = "买了${count}个苹果" // 买了15个苹果

        通过下标即可访问字符串中元素,如下。

var str = "abc"
var c1 = str[0] // 'a'
var c2 = str.elementAt(1) // 'b'

2.5.2 字符串函数

        Kotlin 中 String 类继承 CharSequence 类,在 _String.kt、StringsJVM.kt、StringNumberConversionsJVM.kt 等文件中定义了一些 CharSequence、String 的扩展函数。

        1)判空

// length == 0
public inline fun CharSequence.isEmpty(): Boolean
// length > 0
public inline fun CharSequence.isNotEmpty(): Boolean
// this == null || this.length == 0
public inline fun CharSequence?.isNullOrEmpty(): Boolean
// length == 0 || indices.all { this[it].isWhitespace() }
public actual fun CharSequence.isBlank(): Boolean
// !isBlank()
public inline fun CharSequence.isNotBlank(): Boolean
// this == null || this.isBlank()
public inline fun CharSequence?.isNullOrBlank(): Boolean

        2)去掉首位空字符

public inline fun String.trim(): String

        3)查找字符

public expect fun CharSequence.elementAt(index: Int): Char
public inline fun CharSequence.find(predicate: (Char) -> Boolean): Char
public inline fun CharSequence.findLast(predicate: (Char) -> Boolean): Char
public fun CharSequence.first(): Char
public inline fun CharSequence.first(predicate: (Char) -> Boolean): Char
public fun CharSequence.last(): Char
public inline fun CharSequence.last(predicate: (Char) -> Boolean): Char
public inline fun CharSequence.random(): Char

        4)查找字符索引

public inline fun CharSequence.indexOfFirst(predicate: (Char) -> Boolean): Int
public inline fun CharSequence.indexOfLast(predicate: (Char) -> Boolean): Int

         5)过滤字符

public inline fun String.filter(predicate: (Char) -> Boolean): String
public inline fun String.filterIndexed(predicate: (index: Int, Char) -> Boolean): String
public inline fun String.filterNot(predicate: (Char) -> Boolean): String

        6)统计字符个数

// 返回length
public inline fun CharSequence.count(): Int
// 统计字符串中满足条件的字符个数
public inline fun CharSequence.count(predicate: (Char) -> Boolean): Int

         7)字符串匹配

// 判断字符串是否以xxx开头
public fun CharSequence.startsWith(char: Char, ignoreCase: Boolean = false): Boolean
public fun CharSequence.startsWith(prefix: CharSequence, ignoreCase: Boolean = false): Boolean
public fun CharSequence.startsWith(prefix: CharSequence, startIndex: Int, ignoreCase: Boolean = false): Boolean
// 判断字符串是否以xxx结尾
public fun CharSequence.endsWith(char: Char, ignoreCase: Boolean = false): Boolean
public fun CharSequence.endsWith(suffix: CharSequence, ignoreCase: Boolean = false): Boolean

        8)获取子串

public inline fun CharSequence.substring(startIndex: Int, endIndex: Int = length): String
public fun String.substring(range: IntRange): String
public fun String.slice(indices: IntRange): String
public fun String.take(n: Int): String
public fun String.takeLast(n: Int): String

        9)字符串分割

public fun CharSequence.split(vararg delimiters: Char, ignoreCase: Boolean = false, limit: Int = 0): List<String>
public fun CharSequence.split(vararg delimiters: String, ignoreCase: Boolean = false, limit: Int = 0): List<String>

        说明:字符串分割支持正则匹配,详见 → 正则表达式(Regular Expression)详解。 

        10)字串替换

// 替换所有匹配的字符或字符串
public actual fun String.replace(oldChar: Char, newChar: Char, ignoreCase: Boolean = false): String
public actual fun String.replace(oldValue: String, newValue: String, ignoreCase: Boolean = false): String
// 替换第一个匹配的字符或字符串
public actual fun String.replaceFirst(oldChar: Char, newChar: Char, ignoreCase: Boolean = false): String
public actual fun String.replaceFirst(oldValue: String, newValue: String, ignoreCase: Boolean = false): String
// 将第一个匹配的字符或字符串前面的字符串替换为指定字符或字符串
public fun String.replaceBefore(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String
public fun String.replaceBefore(delimiter: String, replacement: String, missingDelimiterValue: String = this): String
// 将第一个匹配的字符或字符串后面的字符串替换为指定字符或字符串
public fun String.replaceAfter(delimiter: Char, replacement: String, missingDelimiterValue: String = this): String
public fun String.replaceAfter(delimiter: String, replacement: String, missingDelimiterValue: String = this): String
// 将指定索引范围的字符串替换为新字符串
public inline fun String.replaceRange(startIndex: Int, endIndex: Int, replacement: CharSequence): String
public inline fun String.replaceRange(range: IntRange, replacement: CharSequence): String

        说明:字符串替换支持正则匹配,详见 → 正则表达式(Regular Expression)详解。

         11)字符串反转

public inline fun String.reversed(): String

        12)大小写转换

// 转为大写字符串, locale可以传入Locale.ROOT
public inline fun String.uppercase(locale: Locale): String
// 转为小写字符串, locale可以传入Locale.ROOT
public inline fun String.lowercase(locale: Locale): String

        13)数据类型转换

public actual inline fun String.toInt(): Int
public actual inline fun String.toLong(): Long
public actual inline fun String.toFloat(): Float
public actual inline fun String.toDouble(): Double
public inline fun String.toBigInteger(): java.math.BigInteger
public inline fun String.toBigDecimal(): java.math.BigDecimal

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

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

相关文章

Tomcat之虚拟主机

1.创建存放网页的目录 mkdir -p /web/{a,b} 2.添加jsp文件 vi /web/a/index.jsp <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <html> <head><title>JSP a page</title> </head> …

Rust 初体验3

“开胃”代码 fn main() {let (a, mut b): (bool,bool) (true, false);// a true,不可变; b false&#xff0c;可变println!("a {:?}, b {:?}", a, b);b true;assert_eq!(a, b); }Rust语法和C语言有很大不同&#xff0c;特别是在变量声明、打印输出和错误处…

PAT-Apat甲级题1009(python和c++实现)

PTA | 1009 Product of Polynomials 1009 Product of Polynomials 作者 CHEN, Yue 单位 浙江大学 This time, you are supposed to find AB where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case occupies 2 lin…

dockerfile 详细讲解

当编写 Dockerfile 时&#xff0c;你需要考虑你的应用程序所需的环境和依赖项&#xff0c;并将其描述为一系列指令。下面是一个简单的示例&#xff0c;演示如何编写一个用于部署基于 Node.js 的网站的 Dockerfile&#xff1a; Dockerfile # 使用官方 Node.js 镜像作为基础镜像…

力扣:47. 全排列 II

回溯解法思路&#xff1a; 1.先写一个集合来接收全部的全排列&#xff0c;再写一个集合来接受单个的全排列。在声明一个int【】数组来用于去重用的标记nums数组中什么元素用了的标记。同时排列一下nums数组方便去除重复的全排列。 2.调用回溯函数&#xff0c;终止条件为li2集…

Matplotlib绘制炫酷散点图:从二维到三维,再到散点图矩阵的完整指南与实战【第58篇—python:Matplotlib绘制炫酷散点图】

文章目录 Matplotlib绘制炫酷散点图&#xff1a;二维、三维和散点图矩阵的参数说明与实战引言二维散点图三维散点图散点图矩阵二维散点图进阶&#xff1a;辅助线、注释和子图三维散点图进阶&#xff1a;动画效果和交互性散点图矩阵进阶&#xff1a;调整样式和添加密度图总结与展…

低代码平台痛点

1、数据查询性能一直是低代码平台的痛点 原来的平台&#xff0c;数据查询时&#xff0c;直接查数据库&#xff0c;现在低代码平台需要先经过元数据解析后&#xff0c;才知道如何查数据库&#xff0c;因此增加了查询的耗时&#xff0c;针对不同的低码平台设计&#xff0c;影响的…

stable_diffusion提示词编写笔记(1)

stable_diffusion提示词编写笔记(1) start 总结一下AI绘画学到的知识。 一.提示词分两种&#xff1a; 1.正向提示词&#xff1b; 2.反向提示词&#xff1b; 一个对应你希望图形包含的内容提示词&#xff0c;一个对应你不希望图形出现的内容提示词。 二.如何书写提示词 1.内…

记一次VulnStack渗透

信息收集 netdiscover的主机发现部分不再详解&#xff0c;通过访问端口得知20001-2003端口都为web端口&#xff0c;所以优先考虑从此方向下手 外网渗透 GetShell Struct漏洞 访问2001端口后&#xff0c;插件Wappalyzer爬取得知这是一个基于Struct的web站点&#xff0c;直接…

gtkmm4 应用程序使用 CSS 样式

文章目录 前言css选择器css文件示例源代码效果 前言 程序样式和代码逻辑分离开 使代码逻辑更可观 css选择器 Cambalache提供了两种css-classes 相当于css里的类名:class“类名”css-name 相当于css里的标签名:spin div p 啥的 如上我设置了这个按钮控件的类名为testButton 标…

【Java】万万没想到,又被问ThreadLocal了

我待ThreadLocal如初恋&#xff0c;ThreadLocal虐我千百遍。但这一次&#xff0c;要彻底搞懂ThreadLocal 回顾一下面试名场面&#xff1a; 面试官&#xff1a;Handler如何做到与线程绑定的&#xff1f; 我&#xff1a;每个Handler只有一个相关联的Looper&#xff0c;线程绑定…

如何开始深度学习,从实践开始

将“如何开始深度学习”这个问题喂给ChatGPT和文心一言&#xff0c;会给出很有专业水准的答案&#xff0c;比如&#xff1a; 要开始深度学习&#xff0c;你可以遵循以下步骤&#xff1a; 学习Python编程语言的基础知识&#xff0c;因为它在深度学习框架中经常被使用。 熟悉线性…

自然人如何代开发票

1&#xff1a;登录国家税务总局深圳市电子税务局 地址&#xff1a;国家税务总局深圳市电子税务局 2&#xff1a;个人所得税APP 扫描登录 或 身份证登录 3&#xff1a;选择 自然人代开增值税电子普通发票 4&#xff1a;申请代开 5&#xff1a;人脸识别 6&#xff1a;画框的…

509. 斐波那契数

Problem: 509. 斐波那契数 文章目录 思路解题方法复杂度Code解法一 &#xff08;暴力搜索&#xff09;解法二 &#xff08;记忆化搜索&#xff09;解法三&#xff08;动态规划&#xff09;解法四&#xff08;动态规划&#xff08;空间O(1)&#xff09;&#xff09; 思路 斐波那…

【每日一题】LeetCode——链表的中间结点

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

【Python4Delphi】学习笔记(一):介绍篇

一、前言&#xff1a; 1. python语言简介&#xff1a; 众所周知&#xff0c;python是目前非常流行的编程语言之一&#xff0c;自20世纪90年代初Python语言诞生至今&#xff0c;它已被逐渐广泛应用于系统管理任务的处理和Web编程。 由于Python语言的简洁性、易读性以及可扩展性…

苏宁易购移动端首页(rem布局)

技术选型 方案∶采取单独制作移动页面方案技术:布局采取rem适配布局( less rem &#xff0b;媒体查询)设计图:设计图采用750px设计尺寸 设置视口标签以及引入初始化样式 <meta name"viewport" content"widthdevice-width, initial-scale1.0, user-scalable…

Qt网络编程-写一个简单的网络调试助手

环境 Windows&#xff1a;Qt5.15.2&#xff08;VS2022&#xff09; Linux&#xff1a;Qt5.12.12&#xff08;gcc) 源代码 TCP服务器 头文件&#xff1a; #ifndef TCPSERVERWIDGET_H #define TCPSERVERWIDGET_H #include <QWidget> namespace Ui { class TCPServerW…

2024.1.30力扣每日一题——使循环数组所有元素相等的最少秒数

2024.1.30 题目来源我的题解方法一 暴力模拟&#xff08;无法通过&#xff09;方法二 哈希表数学 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2808 我的题解 方法一 暴力模拟&#xff08;无法通过&#xff09; 直接暴力枚举。记录每一个元素所在的位置&#xff0c;然…

注意啦,MySQL8.0最新版是没有utf8选项,但是有utf8mb3和utf8mb4选项

今天在安装完MySQL最新版&#xff08;8.0.36&#xff09;&#xff0c;然后用navicat连接数据&#xff0c;创建数据库的时候&#xff0c;发现: MySQL最新版是没有utf8选项&#xff0c;但是有utf8mb3和utf8mb4选项 然后就只能卸载掉最新版&#xff0c;安装了8.0.28. &#xff08…