kotlin从入门到精通之内置类型
基本类型
声明变量
val(value的简写)用来声明一个不可变的变量,这种变量在初始赋值之后就再也不能重新赋值,对应Java中的final变量。
var(variable的简写)用来声明一个可变的变量,这种变量在初始赋值之后仍然可以再被重新赋值,对应Java中的非final变量。
类型自动推导
kotlin还能对我们的声明的变量进行类型的自动推导:
易混淆的Long类型标记
Kotlin的数值类型转换
无符号类型
目的是为了兼容C
Kotlin的字符串
fun main() {var a = 2val b = "Hello Kotlin"// val c = 12345678910l // compile error.val c = 12345678910L // okval d = 3.0 // Double, 3.0f Floatval e: Int = 10//val f: Long = e // implicitness not allowedval f: Long = e.toLong() // implicitness not allowedval float1: Float = 1fval double1 = 1.0val g: UInt = 10uval h: ULong = 100000000000000000uval i: UByte = 1uprintln("Range of Int: [${Int.MIN_VALUE}, ${Int.MAX_VALUE}]")println("Range of UInt: [${UInt.MIN_VALUE}, ${UInt.MAX_VALUE}]")val j = "I❤️China"println("Value of String 'j' is: $j") // no need bracketsprintln("Length of String 'j' is: ${j.length}") // need bracketsSystem.out.printf("Length of String 'j' is: %d\n", j.length)val k = "Today is a sunny day."val m = String("Today is a sunny day.".toCharArray())println(k === m) // compare references.println(k == m) // compare values.val n = """<!doctype html><html><head><meta charset="UTF-8"/><title>Hello World</title></head><body><div id="container"><H1>Hello World</H1><p>This is a demo page.</p></div></body></html>""".trimIndent()println(n)
}
public class JavaBasicTypes {public static void main(String... args) {int a = 2;final String b = "Hello Java";long c = 12345678910l; // ok but not good.long d = 12345678910L; // okint e = 10;long f = e; // implicit conversion// no unsigned numbers.String j = "I❤️China";System.out.println("Value of String 'j' is: " + j);System.out.println("Length of String 'j' is: " + j.length());System.out.printf("Length of String 'j' is: %d\n", j.length());String k = "Today is a sunny day.";String m = new String("Today is a sunny day.");System.out.println(k == m); // compare references.System.out.println(k.equals(m)); // compare values.String n = "<!doctype html>\n" +"<html>\n" +"<head>\n" +" <meta charset=\"UTF-8\"/>\n" +" <title>Hello World</title>\n" +"</head>\n" +"<body>\n" +" <div id=\"container\">\n" +" <H1>Hello World</H1>\n" +" <p>This is a demo page.</p>\n" +" </div>\n" +"</body>\n" +"</html>";System.out.println(n);}
}
数组Array
数组的创建
数组的长度
数组的读写
数组的遍历
数组的包含关系
fun main() {val a = IntArray(5)println(a.size) //same with the Collections(e.g. List)val b = ArrayList<String>()println(b.size)val c0 = intArrayOf(1, 2, 3, 4, 5)val c1 = IntArray(5){ 3 * (it + 1) } // y = 3*(x + 1)println(c1.contentToString())val d = arrayOf("Hello", "World")d[1] = "Kotlin"println("${d[0]}, ${d[1]}")val e = floatArrayOf(1f, 3f, 5f, 7f)for (element in e) {println(element)}e.forEach {println(it)}if(1f in e){println("1f exists in variable 'e'")}if(1.2f !in e){println("1.2f not exists in variable 'e'")}}
import java.util.ArrayList;public class JavaArrays {public static void main(String... args) {int[] a = new int[5];System.out.println(a.length);// only array use 'length'ArrayList<String> b = new ArrayList<>();System.out.println(b.size());int[] c = new int[]{1, 2, 3, 4, 5};String[] d = new String[]{"Hello", "World"};d[1] = "Java";System.out.println(d[0] + ", " + d[1]);float[] e = new float[]{1, 3, 5, 7};for (float element : e) {System.out.println(element);}for (int i = 0; i < e.length; i++) {System.out.println(e[i]);}// Test in an Arrayfor (float element : e) {if(element == 1f){System.out.println("1f exists in variable 'e'");break;}}//Test not in an Arrayboolean exists = false;for (float element : e) {if(element == 1.2f){exists = true;break;}}if(!exists){System.out.println("1.2f not exists in variable 'e'");}}
}
区间
区间的创建
闭区间
开区间
倒序区间
区间的步长
区间的迭代
区间的包含关系
区间的应用
fun main() {val intRange = 1..10 // [1, 10]val charRange = 'a'..'z'val longRange = 1L..100Lval floatRange = 1f .. 2f // [1, 2]val doubleRange = 1.0 .. 2.0println(intRange.joinToString())println(floatRange.toString())val uintRange = 1U..10Uval ulongRange = 1UL..10ULval intRangeWithStep = 1..10 step 2val charRangeWithStep = 'a'..'z' step 2val longRangeWithStep = 1L..100L step 5println(intRangeWithStep.joinToString())val intRangeExclusive = 1 until 10 // [1, 10)val charRangeExclusive = 'a' until 'z'val longRangeExclusive = 1L until 100Lprintln(intRangeExclusive.joinToString())val intRangeReverse = 10 downTo 1 // [10, 9, ... , 1]val charRangeReverse = 'z' downTo 'a'val longRangeReverse = 100L downTo 1Lprintln(intRangeReverse.joinToString())for (element in intRange) {println(element)}intRange.forEach {println(it)}if (3.0 !in doubleRange) {println("3 in range 'intRange'")}if (12 !in intRange) {println("12 not in range 'intRange'")}val array = intArrayOf(1, 3, 5, 7)for (i in 0 until array.size) {println(array[i])}for(i in array.indices){println(array[i])}
}
集合框架
集合框架的接口类型对比
集合框架的创建
集合实现类复用与类型别名
集合框架的读写和修改
Pair
Triple
fun main() {val intList: List<Int> = listOf(1, 2, 3, 4)val intList2: MutableList<Int> = mutableListOf(1, 2, 3, 4)val map: Map<String, Any> =mapOf("name" to "benny", "age" to 20)val map2: Map<String, Any> =mutableMapOf("name" to "benny", "age" to 20)val stringList = ArrayList<String>()for (i in 0 .. 10){stringList.add("num: $i")}for (i in 0 .. 10){stringList += "num: $i"}for (i in 0 .. 10){stringList -= "num: $i"}stringList[5] = "HelloWorld"val valueAt5 = stringList[5]val hashMap = HashMap<String, Int>()hashMap["Hello"] = 10println(hashMap["Hello"])// val pair = "Hello" to "Kotlin"
// val pair = Pair("Hello", "Kotlin")
//
// val first = pair.first
// val second = pair.second
// val (x, y) = pairval triple = Triple("x", 2, 3.0)val first = triple.firstval second = triple.secondval third = triple.thirdval (x, y, z) = triple}
import java.util.*;public class JavaCollections {public static void main(String... args) {List<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3, 4));List<String> stringList = new ArrayList<>();for (int i = 0; i < 10; i++) {stringList.add("num: " + i);}for (int i = 0; i < 10; i++) {stringList.remove("num: " + i);}stringList.set(5, "HelloWorld");String valueAt5 = stringList.get(5);HashMap<String, Integer> hashMap = new HashMap<>();hashMap.put("Hello", 10);System.out.println(hashMap.get("Hello"));}
}
函数
有自己的类型,可以赋值、传递,并再合适的条件下调用
函数的定义
函数vs方法
函数的类型
函数的引用
函数的引用类似C语言的函数指针,可用于函数传递
由于类型可以自动推断,所以可以不用写类型名
变长参数
多返回值
默认参数
具名参数
package com.bennyhuo.kotlin.builtintypes.functionsfun main(vararg args: String) {println(args.contentToString())val x:(Foo, String, Long)->Any = Foo::barval x0: Function3<Foo, String, Long, Any> = Foo::bar// (Foo, String, Long)->Any = Foo.(String, Long)->Any = Function3<Foo, String, Long, Any>val y: (Foo, String, Long) -> Any = xval z: Function3<Foo, String, Long, Any> = xyy(x)val f: ()->Unit = ::fooval g: (Int) ->String = ::fooval h: (Foo, String, Long)->Any= Foo::barmultiParameters(1, 2, 3, 4)defaultParameter(y = "Hello")val (a, b, c) = multiReturnValues() //伪val r = a + bval r1 = a + c}fun yy(p: (Foo, String, Long) -> Any){//p(Foo(), "Hello", 3L)
}class Foo {fun bar(p0: String, p1: Long): Any{ TODO() }
}fun foo() { }
fun foo(p0: Int): String { TODO() }fun defaultParameter(x: Int = 5, y: String, z: Long = 0L){TODO()
}fun multiParameters(vararg ints: Int){println(ints.contentToString())
}fun multiReturnValues(): Triple<Int, Long, Double> {return Triple(1, 3L, 4.0)
}
案例:四则计算器
/*** input: 3 * 4*/
fun main(vararg args: String) {if(args.size < 3){return showHelp()}val operators = mapOf("+" to ::plus,"-" to ::minus,"*" to ::times,"/" to ::div)val op = args[1]val opFunc = operators[op] ?: return showHelp()try {println("Input: ${args.joinToString(" ")}")println("Output: ${opFunc(args[0].toInt(), args[2].toInt())}")} catch (e: Exception) {println("Invalid Arguments.")showHelp()}
}fun plus(arg0: Int, arg1: Int): Int{return arg0 + arg1
}fun minus(arg0: Int, arg1: Int): Int{return arg0 - arg1
}fun times(arg0: Int, arg1: Int): Int{return arg0 * arg1
}fun div(arg0: Int, arg1: Int): Int{return arg0 / arg1
}fun showHelp(){println("""Simple Calculator:Input: 3 * 4Output: 12""".trimIndent())
}
相关文章:
kotlin从入门到精通之内置类型
基本类型 声明变量 val(value的简写)用来声明一个不可变的变量,这种变量在初始赋值之后就再也不能重新赋值,对应Java中的final变量。 var(variable的简写)用来声明一个可变的变量,这种变量在初始…...
实战指南:使用Spring Boot实现消息的发送和接收
当涉及到消息发送和接收的场景时,可以使用Spring Boot和消息中间件RabbitMQ来实现。下面是一个简单的示例代码,展示了如何在Spring Boot应用程序中创建消息发送者和接收者,并发送和接收一条消息。 首先,你需要进行以下准备工作 确…...
常用的数据结构——栈
目录 1、入栈 2、出栈 3、获取栈顶的元素 4、从栈中查找元素 栈是一种常见的数据结构,栈的特点是后进先出,就像我们叠盘子,拿走上面的盘子才能拿到下一个。java中的栈java.util.Stack是通过java.util.Vector实现的,所以底层都…...
C++完成淄博烧烤节管理系统
背景: 这次我们结合今年淄博烧烤做一个餐厅管理系统,具体需求如下,我们选择的是餐饮商家信息管理 问题描述: 淄博烧烤今年大火,“进淄赶烤”是大家最想干的事情,淄博烧烤大火特火的原因,火的…...
我心中的TOP1编程语言
目录 一、评选最佳编程语言时需要考虑哪些标准 (一)易用性 (二)执行效率 (三)语言功能特性 (四)工具生态环境 (五)开发者社区 二、不同编程语言的优点…...
Linux工具之gdb(含移植到arm-linux系统)
文章目录 文件目录结构移植ncurses库移植gdb移植到arm板调试测试 linux主机:ubuntu-18.04 交叉编译器:arm-buildroot-linux-gnueabihf 开发板kernel:Linux 5.4.0-150-generic x86_64 开发板:100ASK_STM32MP157_PRO开发板 arm-…...
DolphinScheduler
参考 Apache DolphinScheduler v1.3.9 使用手册 内置组件 masterserverworkserverzookeepertask queuealertapiui 设计 去中心化设计 通过zk选举 UI功能 队列管理 Yarn调度器的资源队列 用户管理 租户对应的是Linux系统用户,是Worker执行任务使用的用户 用户…...
10大白帽黑客专用的 Linux 操作系统
平时在影视里见到的黑客都是一顿操作猛如虎,到底他们用的都是啥系统呢? 今天给大家分享十个白帽黑客专用的Linux操作系统。 ▍1. Kali Linux Kali Linux是最著名的Linux发行版,用于道德黑客和渗透测试。Kali Linux由Offensive Security开发&…...
Golang每日一练(leetDay0099) 单词规律I\II Word Pattern
目录 290. 单词规律 Word Pattern 🌟 291. 单词规律 II Word Pattern ii 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 …...
linux_centos7.9/ubuntu20.04_下载镜像及百度网盘分享链接
1、镜像下载站点 网易开源镜像:http://mirrors.163.com/ 搜狐开源镜像:http://mirrors.sohu.com/ 阿里开源镜像:https://developer.aliyun.com/mirror/ 首都在线科技股份有限公司:http://mirrors.yun-idc.com/ 常州贝特康姆软件技…...
Reqable HTTP一站式开发+调试工具(小黄鸟作者另一力作、小黄鸟完美替代品)
本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!Reqable HTTP一站式开发+调试工具(小黄鸟作者另一力作、小黄鸟替代品) 环境 win10pixel4Android13概览 …...
Yacc 与 Lex 快速入门
Yacc 与 Lex 快速入门 简介: Lex 和 Yacc 是 UNIX 两个非常重要的、功能强大的工具。事实上, 如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 FORTRAN 和 C 的编译器如同儿戏。本文详细的讨论了编写自己的语言和编译器所 用到的这两…...
【开源与项目实战:开源实战】80 | 开源实战二(下):从Unix开源开发学习应对大型复杂项目开发
上两节课,我们分别从代码编写、研发管理的角度,学习了如何应对大型复杂软件开发。在研发管理这一部分,我们又讲到比较重要的几点,它们分别是编码规范、单元测试、持续重构和 Code Review。其中,前三点在专栏的理论部分…...
【单周期CPU】LoongArch | 立即数扩展模块Ext | 32位算术逻辑运算单元(ALU)
前言:本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中基本组合逻辑部件的设计。 💻环境:一台内存4GB以上,装有64位Windows操作系统和Vivado 201…...
Python实现数据结构的基础操作
目录 一、列表(List) 二、字典(Dictionary) 三、集合(Set) 四、链表的实现 五、队列和栈 数据结构是计算机科学中非常重要的概念,它用于存储和组织数据以便有效地进行操作。Python作为一种…...
20230624----重返学习-vue-响应式处理思路-仿源码
day-098-ninety-eight-20230624-vue-响应式处理思路-仿源码 vue vue大体概念 Vue是渐进式框架 所谓渐进式框架,就是把一套全面的框架设计体系,拆分成为多个框架,项目中需要用到那些需求,再导入对应的框架,以此来保证…...
【MongoDB】三、使用Java连接MongoDB
【MongoDB】三、使用Java连接MongoDB 实验目的实验内容练习1、开启Eclipse,创建Java Project项目,命名为Mongo12、添加项目依赖的jar包3、创建类MongoDemo4、连接数据库5、查看集合6、创建集合7、删除集合8、查看文档9、插入文档10、更新文档11、删除文档…...
【C++】通讯录的基本实现,附有源码分享
目录 1、运行环境 2、系统实现功能 2.1菜单功能 2.2退出通讯录功能 2.3添加联系人功能 2.4显示联系人功能 2.5删除联系人功能 2.6查找联系人功能 2.7修改联系人功能 2.8清空联系人功能 2.9动态扩容功能 2.10选择优化功能 2.11文件操作 3、源码分享 1、运行环境 …...
UI 自动化测试 —— selenium的简单介绍和使用
selenium 是 web 应用中基于 UI 的自动化测试框架,支持多平台、多浏览器、多语言。 提到 UI 自动化就先了解什么是自动化测试? 目录 1. 自动化测试 2. UI 自动化 2.1 UI 自动化的特点 2.2 UI 自动化测试的优缺点 2.3 UI 自动化测试的使用对象 2.4…...
mybatisPlus中apply的使用以进行联表等复杂sql语句
在 MyBatis-Plus 中,apply() 方法可以用于添加任意的 SQL 片段,包括联表查询。因此,你可以使用 apply() 方法来处理各种类型的联表查询。 使用 apply() 方法的好处是可以在查询条件中直接添加原生的 SQL 片段,而不受 MyBatis-Plu…...
自学Python技术的方法
目录 一、Python技术介绍 二、学习前的准备工作 三、学习时的具体操作 四、如何巩固学习 Python是一种高级编程语言,被广泛用于软件开发、数据分析、人工智能和科学计算等领域。它于1991年由Guido van Rossum创建,并且其简洁、易读的语法以及丰富的标…...
python熟悉python基础语法,了解html网络结构,了解json格式数据,含有字符串
前言 Python网络爬虫是利用Python编写的程序,通过自动化地访问网页、解析html或json数据,并提取所需信息的技术。下面将详细介绍一些与Python网络爬虫相关的重要知识点。 1、Python基础语法: 变量和数据类型:学习如何声明变量以及…...
linux mail -s发送邮件异常解决
异常: Error initializing NSS: Unknown error -8015. "/root/dead.letter" 11/301 . . . message not sent. 出现此问题,大概率是和证书相关。如果没有安装证书,请先安装: 1,下载 yum -y install mailx …...
Netty核心技术七--Google Protobuf
1.编码和解码的基本介绍 编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码 codec(编解码器) 的组成部分有两个:decoder(解码器)和encoder(编码器)。encoder 负责把…...
【Docker】Docker常用命令总结
文章目录 一、帮助命令二、镜像命令三、容器命令四、常用的其他命令 在开发过程中,经常涉及到 docker 的相关操作,本文对常用的指令进行汇总。 一、帮助命令 docker version # 显示docker版本信息 docker info # 显示docker系统信息ÿ…...
React 对比class与Effect Hook优化响应式数据更新监听,感受useEffect真正的强大
还是之前写过的一个组件 import React from "react"export default class index extends React.Component{constructor(props){super(props);this.state {name: "小猫猫"}}componentDidMount ()>{document.title this.state.name;}componentDidUpda…...
AWS Lambda 介绍
计算服务的演进 EC2------Container-------Lambda 虚拟机---容器--------------serverless无服务器架构 什么是AWS Lambda? AWS lambda的核心是事件驱动,驱动可能来自,Alexa,SNS,DynamoDB,S3,Kinesis等&…...
linux之权限管理
目录 1.一.基本小语句 2.文件权限操作chmod 1.一.基本小语句 ls - a 查看此文件夹所有和隐藏内容 ls - l 查看此文件夹权限 chown 改变文所有者 2.文件权限操作chmod chmod 参数 文件名 文件的权限主要针对三类对象进行定义 owner 属主, u:针对前三个部分的权限修改 …...
【设计模式与范式:行为型】61 | 策略模式(下):如何实现一个支持给不同大小文件排序的小程序?
上一节课,我们主要介绍了策略模式的原理和实现,以及如何利用策略模式来移除 if-else 或者 switch-case 分支判断逻辑。今天,我们结合“给文件排序”这样一个具体的例子,来详细讲一讲策略模式的设计意图和应用场景。 除此之外&…...
【C++】auto_ptr为何被唾弃?以及其他智能指针的学习
搭配异常可以让异常的代码更简洁 文章目录 智能指针 内存泄漏的危害 1.auto_ptr(非常不建议使用) 2.unique_ptr 3.shared_ptr 4.weak_ptr总结 智能指针 C中为什么会需要智能指针呢?下面我们看一下样例: int div() {int a, b;cin >&g…...
建设的优质网站/泉州百度推广咨询
当我在帮朋友处理计算机安全问题的时候,总会遇到他们这样问我:我的系统上已经安装了防火墙和杀毒软件,而且都是正版的,并且天天升级病毒库,为什么还会感染***呢?就目前来说,不只是普通网络用户存…...
wordpress嵌入b站视频/提交网站收录入口
作者介绍 : 李振环,贝壳金服数据基础架构负责人,目前负责数据平台和企业级数据仓库开发。 公司介绍 贝壳金服是专注居住场景的金融科技服务商,起步于2006年成立的链家金融事业部,并于 2017年3月正式独立运营。 贝壳金服…...
网站搜索引擎优化是什么/成都黑帽seo
1. 人之所以痛苦,在于追求错误的东西。 2. 与其说是别人让你痛苦,不如说自己的修养不够。 3. 如果你不给自己烦恼,别人也永远不可能给你烦恼。因为你自己的内心,你放不下。 4. 好好的管教你自己,不要管别人…...
秦皇岛网站制作公司哪家好/长春seo顾问
存储过程简介 SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数&#x…...
北京 科技网站建设/成都做整站优化
使用cocos compile -p android 对项目进行编译的时候,遇到res文件中包含了只读属性的svn目录,不能进行删除而报错。 错误如下图(build_android.py里面对.svn文件进行删除时,权限不够) 解决方法就是修改 tools\cocos2d-…...
wordpress 防止采集/培训心得体会2000字
Android中TV开发经常见到竖向排列的栏目列表和内容,今天就来讲讲怎么实现的。最开始我的实现方式的用一个竖向的第三方tablayout库,喜气洋洋的引用到项目中,效果也实现了,因为我们的项目有单选、上一步、下一步、刷新等按钮操作,发…...