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

最早的做团购的网站/百度快照查询入口

最早的做团购的网站,百度快照查询入口,做企业网站需要多少钱,网站开发的高级阶段包括文章目录 34.Kotlin 泛型中的“*”和“Any”有什么区别?Any*总结 35.Kotlin 协程在哪些方面优于 RxKotlin/RxJava?1. 语法简洁性和易读性2. 性能3. 错误处理和调试4. 场景适用性5. 学习和使用成本 36.Kotlin 协程中的 launch/join 和 async/await 有什么…

文章目录

  • 34.Kotlin 泛型中的“*”和“Any”有什么区别?
      • Any
      • *
      • 总结
  • 35.Kotlin 协程在哪些方面优于 RxKotlin/RxJava?
      • 1. 语法简洁性和易读性
      • 2. 性能
      • 3. 错误处理和调试
      • 4. 场景适用性
      • 5. 学习和使用成本
  • 36.Kotlin 协程中的 launch/join 和 async/await 有什么区别?
      • launch/join
      • async/await
      • 对比分析
  • 37.如何在 Kotlin 中实现 Builder 模式?
      • 1. 定义目标类
      • 2. 创建 Builder 类
      • 3. 使用 Builder 构建对象
      • 额外:使用 Kotlin 的 `apply` 和 `with` 函数
      • 总结
  • 38.Kotlin 中注解 @JvmOverloads 的作用?
      • 一、作用概述
      • 二、具体表现
      • 三、使用场景
      • 四、注意事项

34.Kotlin 泛型中的“*”和“Any”有什么区别?

在Kotlin中,泛型(Generics)是一种在类、接口或方法中使用的类型参数化技术,它允许你编写灵活且可重用的代码。在处理泛型时,*Any 各自扮演着不同的角色,尽管它们在某些上下文中可能看起来相似或相关,但它们实际上用于不同的目的。

Any

Any 是 Kotlin 中的根类型,类似于 Java 中的 Object。在 Kotlin 中,任何类都隐式地继承自 Any 类,这意味着 Any 可以作为任何类型的超类型。当你想要表示一个可以是任何类型的变量时,你可以使用 Any。但是,请注意,Any 并不提供除了 equals(), hashCode(), 和 toString() 之外的方法,这些方法是从 Any 继承而来的。

*

在 Kotlin 的泛型中,* 通常与星号投影(Star Projection)一起使用,特别是在处理泛型集合时。星号投影用于表示未知类型的泛型参数。有两种星号投影:

  1. 出方向星号投影 (*?):这表示未知类型的泛型参数,但它是可空的。这通常用于只读操作,因为你不能向这样的集合中添加元素(因为类型未知且可能为null)。

  2. 入方向星号投影 (*):这表示未知类型的泛型参数,但它不是可空的(尽管实际上集合中的元素仍然可以是null,但这里的“不可空”指的是类型参数本身)。这通常用于写操作,因为你可以向这样的集合中添加任何类型的元素(尽管这通常不是一个好的做法,因为它破坏了类型安全)。

然而,需要注意的是,在 Kotlin 的泛型声明或类型参数中直接使用 * 是不常见的。* 主要是在处理泛型集合的上下文中,特别是在使用泛型通配符(如 List<*>)时,作为星号投影的一部分出现。

总结

  • Any 是 Kotlin 的根类型,表示任何类型的超类型。
  • *(星号)在 Kotlin 泛型中主要与星号投影一起使用,用于表示未知类型的泛型参数,特别是在处理泛型集合时。

因此,Any* 在 Kotlin 泛型中的用途和含义是不同的。Any 用于表示任何类型的变量,而 *(作为星号投影的一部分)用于表示泛型集合中未知类型的元素。

35.Kotlin 协程在哪些方面优于 RxKotlin/RxJava?

Kotlin 协程在多个方面相对于 RxKotlin/RxJava(由于 RxKotlin 是 RxJava 在 Kotlin 上的扩展,这里主要讨论 RxJava)具有优势。以下是几个主要方面的比较:

1. 语法简洁性和易读性

  • Kotlin 协程:协程的语法更加简洁直观,使用 suspend 关键字即可将函数标记为可挂起的,使得异步代码看起来就像同步代码一样。这种特性使得协程代码更易于理解和维护。
  • RxJava:RxJava 的语法相对复杂,需要使用 ObservableSubscriber 等概念和一系列操作符来进行数据流的操作。对于初学者来说,学习曲线较陡,代码可能比较冗长,尤其是在复杂的操作符链式调用中。

2. 性能

  • Kotlin 协程:协程是轻量级的,可以高效地创建和销毁,不需要像线程那样消耗大量的系统资源。协程的挂起和恢复操作不会阻塞线程,因此能够充分利用系统资源,提高程序的响应性能并减少资源消耗。
  • RxJava:虽然 RxJava 也是高效的,但在处理大量数据流时,尤其是在复杂的操作符链式调用中,可能会产生一定的性能开销。

3. 错误处理和调试

  • Kotlin 协程:协程的错误处理相对简单,可以直接使用 try-catch 语句捕获异常。调试也更为方便,可以直接使用 Kotlin 的调试工具进行断点调试。
  • RxJava:RxJava 通过观察者模式进行错误传播,需要在观察者中实现错误处理逻辑。调试则相对复杂,需要跟踪数据流和操作符的执行过程。

4. 场景适用性

  • Kotlin 协程:协程通常适用于 I/O 操作、异步任务、并发控制等场景。它们提供了协程级别的取消和超时处理,使得在异步任务中更容易处理这些情况。
  • RxJava:RxJava 适用于需要处理大量数据流、进行复杂的转换和组合操作的场景。它提供了丰富的操作符,可以灵活地构建复杂的异步逻辑。

5. 学习和使用成本

  • Kotlin 协程:对于 Kotlin 开发者来说,协程的学习成本较低,更易于上手。它们与 Kotlin 语言天然集成,提供了更好的语言级别支持。
  • RxJava:虽然 RxJava 在处理异步和事件驱动编程方面非常强大,但其复杂的语法和概念对于初学者来说可能有一定的学习难度。

综上所述,Kotlin 协程在语法简洁性、性能、错误处理和调试、场景适用性以及学习和使用成本等方面相对于 RxJava 具有优势。然而,选择使用协程还是 RxJava 取决于项目的实际需求、团队的技术栈以及兼容性和扩展性等因素。在实际应用中,可以根据具体情况进行综合考虑和选择。

36.Kotlin 协程中的 launch/join 和 async/await 有什么区别?

Kotlin 协程中的 launch/joinasync/await 是两种用于启动和管理协程的不同方式,它们在功能、使用场景和返回值等方面存在显著区别。

launch/join

功能描述

  • launch:用于启动一个新的协程,并立即返回一个 Job 对象。协程的执行是异步的,不会阻塞当前线程。launch 本身不关注协程的执行结果,主要用于那些不需要等待结果完成的操作。
  • join:是 Job 对象的一个方法,用于等待协程执行完成。调用 join 会阻塞当前协程体,但不会阻塞当前线程。只有当 join 被调用的协程完成后,当前协程才会继续执行下去。

使用场景

  • 当你不关心协程的执行结果,但需要确保某个异步任务在执行完毕后再继续执行后续操作时,可以使用 launch 搭配 join

返回值

  • launch 返回一个 Job 对象,用于表示协程的执行状态和进行协程控制(如取消、等待)。

async/await

功能描述

  • async:同样用于启动一个新的协程,但与 launch 不同的是,async 返回一个 Deferred 对象。Deferred 对象封装了协程执行的结果,并且提供了 await 方法用于等待并获取该结果。
  • await:是 Deferred 接口的一个方法,用于等待异步操作完成并获取其结果。调用 await 会挂起当前协程,直到 async 协程执行完成并返回结果。

使用场景

  • 当你需要异步执行某个操作,并且需要等待该操作完成以获取其结果时,应使用 async 搭配 await

返回值

  • async 返回一个 Deferred<T> 对象,其中 T 是协程执行结果的类型。通过调用 await 方法可以获取该结果。

对比分析

launch/joinasync/await
功能启动异步协程,不关注结果启动异步协程,并返回结果
返回值Job 对象Deferred 对象
等待方式使用 Job.join() 阻塞当前协程体使用 Deferred.await() 挂起当前协程
使用场景不需要等待协程结果的操作需要等待协程结果的操作
异常处理未捕获的异常可能导致进程崩溃异常被封装在 Deferred 中,可通过 await 获取

综上所述,launch/joinasync/await 在 Kotlin 协程中扮演着不同的角色,适用于不同的场景。选择哪种方式取决于你是否需要等待协程的执行结果。如果你需要结果,则使用 async/await;如果你不需要结果,或者只是想简单地启动一个异步任务,则可以使用 launch/join

37.如何在 Kotlin 中实现 Builder 模式?

在 Kotlin 中实现 Builder 模式是一种常见且有用的设计模式,它允许你以一种链式调用的方式构建复杂对象。Builder 模式通过将对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。Kotlin 的语言特性,如扩展函数和命名参数,使得实现 Builder 模式变得更加简洁和直观。

下面是一个简单的 Kotlin Builder 模式实现示例:

1. 定义目标类

首先,定义一个你想要构建的类。这个类通常包含多个字段和相应的构造函数或设置方法。

data class Person(val name: String,val age: Int,val email: String? = null
)

2. 创建 Builder 类

然后,创建一个 Builder 类,用于构建 Person 对象。Builder 类通常包含多个设置方法(setter),每个方法都返回 Builder 类的实例本身(this),从而支持链式调用。

class PersonBuilder {private var name: String? = nullprivate var age: Int? = nullprivate var email: String? = nullfun name(name: String): PersonBuilder = apply { this.name = name }fun age(age: Int): PersonBuilder = apply { this.age = age }fun email(email: String): PersonBuilder = apply { this.email = email }fun build(): Person {requireNotNull(name) { "Name cannot be null" }requireNotNull(age) { "Age cannot be null" }return Person(name!!, age!!, email)}
}

3. 使用 Builder 构建对象

最后,你可以使用 Builder 类来构建 Person 对象。由于每个设置方法都返回 Builder 类的实例,因此你可以链式地调用它们。

fun main() {val person = PersonBuilder().name("John Doe").age(30).email("john.doe@example.com").build()println(person)
}

额外:使用 Kotlin 的 applywith 函数

Kotlin 的 applywith 函数也可以用来简化 Builder 模式的实现。然而,上面的示例已经展示了如何使用 apply 函数(在 PersonBuilder 的 setter 方法中)。

如果你想要一个更简洁的 API,可以直接在 Person 类上定义扩展函数来模拟 Builder 模式,但这通常不是 Builder 模式的典型用法,因为它将构建逻辑与类本身混合在一起。

总结

在 Kotlin 中实现 Builder 模式是一种提高代码可读性和可维护性的好方法,特别是当你需要构建具有多个字段的复杂对象时。通过链式调用,你可以以清晰和直观的方式设置对象的属性。

38.Kotlin 中注解 @JvmOverloads 的作用?

Kotlin中的`@JvmOverloads`注解主要用于解决Java代码不能直接调用Kotlin中具有默认参数值的方法或构造函数的问题。其作用可以归纳如下:

一、作用概述

  • 生成重载方法:在Kotlin的方法或构造函数上使用@JvmOverloads注解后,Kotlin编译器会为该方法或构造函数生成多个重载版本,每个版本都省略了部分具有默认值的参数。这样,Java代码就可以通过调用这些重载版本来间接地调用Kotlin中具有默认参数值的方法或构造函数。

二、具体表现

  1. 方法重载

    • 假设Kotlin中有一个方法定义如下,其中包含默认参数值:
      @JvmOverloads
      fun myMethod(a: String, b: Int = 0, c: String = "default") {// 方法实现
      }
      
    • 使用@JvmOverloads注解后,Kotlin编译器会生成以下Java代码(简化版):
      public static void myMethod(String a) {myMethod(a, 0, "default");
      }public static void myMethod(String a, int b) {myMethod(a, b, "default");
      }public static void myMethod(String a, int b, String c) {// 原始方法实现,转换为Java代码
      }
      
    • 这样,Java代码就可以通过调用myMethod(String a)myMethod(String a, int b)myMethod(String a, int b, String c)来间接调用Kotlin中的myMethod方法。
  2. 构造函数重载

    • 类似地,如果Kotlin中的类构造函数包含默认参数值,并使用了@JvmOverloads注解,Kotlin编译器也会为该类生成多个重载的构造函数。

三、使用场景

  • 当你的Kotlin库需要被Java代码调用,并且这些Kotlin代码中有使用默认参数值的方法或构造函数时,就应该考虑使用@JvmOverloads注解来确保Java代码能够顺利调用这些Kotlin代码。

四、注意事项

  • @JvmOverloads注解仅适用于Kotlin的方法或构造函数,并且这些方法或构造函数必须包含至少一个默认参数值。
  • 使用@JvmOverloads注解可能会增加生成的字节码大小和复杂性,因为需要为每个默认参数值生成额外的重载方法。因此,在不需要与Java代码互操作的情况下,应谨慎使用。

总的来说,@JvmOverloads注解是Kotlin与Java互操作中的一个重要工具,它极大地简化了从Java代码调用Kotlin中具有默认参数值的方法或构造函数的过程。

答案来自文心一言,仅供参考

相关文章:

Android笔试面试题AI答之Kotlin(8)

文章目录 34.Kotlin 泛型中的“*”和“Any”有什么区别&#xff1f;Any*总结 35.Kotlin 协程在哪些方面优于 RxKotlin/RxJava&#xff1f;1. 语法简洁性和易读性2. 性能3. 错误处理和调试4. 场景适用性5. 学习和使用成本 36.Kotlin 协程中的 launch/join 和 async/await 有什么…...

LVS服务的搭建之NAT模式、DR模式的搭建实战

# LVS的概述 1/什么是LVS linux virtural server的简称&#xff0c;也就是linxu虚拟机服务器&#xff0c;使用lvs可以达到的技术目标是&#xff1a;通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群&#xff0c;他具有良好的可靠性&#xff0…...

Raft分布式存储

文章目录 前言一、项目大纲二、Raft模块1.Raft介绍2.大致内容Leader与选举日志同步、心跳raft日志的两个特点 3.主要流程1. raft类的定义关键函数m_nextIndex 和 m_matchIndex作用 2.启动初始化3.竞选leaderelectionTimeOutTicker:doElectionsendRequestVoteRequestVote 4.日志…...

【Linux】使用nm命令查看动态库包含的符号表

【Linux】使用nm命令查看动态库包含的符号表 文章目录 【Linux】使用nm命令查看动态库包含的符号表1. nm的简介2. nm的使用3. nm查找具体的函数名或变量名Reference 1. nm的简介 nm命令来自name的简写。nm命令常用于查看二进制文件中的符号表&#xff0c;通常用于静态库和可执…...

你还不知道苹果手机截长图的方法?4 种方法都可以

苹果手机截长图 先给大家介绍第一个苹果手机截长图的方法&#xff0c;如果你是在 Safari 浏览器中想要截图分享的话&#xff0c;浏览器截图自带可以截取全页的选项&#xff0c;让你实现截长屏的操作。首先找到你想要截取的网页&#xff0c;然后按下手机的电源按键以及音量按键…...

C++选择题带答案

1. 在定义成员函数时给出的成员函数的正确标记是 (1) 。 (a) <类名>.<函数名> (b) <类名>::<函数名> (c) <对象名>.<函数名> (d) <对象名>::<函数名> 2&#xff0e;以下关于函数指针的叙述中&#xff0c;正确…...

Unity动画模块 之 简单创建一个序列帧动画

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 1.什么是序列帧动画 序列帧动画简单来讲就是通过连续播放一系列静态图像&#xff0c;形成动态视觉效果的过程&#xff…...

学会高效记录并整理编程学习笔记

文章目录 一、前言二、建议和方法2.1 明确笔记目的2.2 选择合适的工具2.3 结构化笔记2.4 高效记录技巧2.5 图文并茂2.6 定期回顾与整理2.7 利用搜索与链接2.8 分享与交流2.9 实践与应用 三、总结 一、前言 高效记录并整理编程学习笔记是提升学习效率和巩固知识的重要手段&…...

Llama 3.1中文微调数据集已上线,超大模型一键部署

7 月的 AI 圈真是卷完小模型卷大模型&#xff0c;精彩不停&#xff01;大多数同学都能体验 GPT-4o、Mistral-Nemo 这样的小模型&#xff0c;但 Llama-3.1-405B 和 Mistral-Large-2 这样的超大模型让很多小伙伴犯了难。 别担心&#xff01;hyper.ai 官网在教程板块为大家提供了…...

css实现太极图

<template><div><!-- 太极图 --><div class"all"><div class"left box"></div><div class"right box"></div><div class"black"><div class"inner_white"><…...

Android 13 移植EthernetSettings/Ethernet更新

移植EthernetSettings Android 13 在Settings搜索没有发现以太网设置,应该是移除了,但是客户的设备需要,所以移植Android 11的. 以太网相关的功能在Android13中进行模块化,提取到packages/modules/Connectivity/中, EthernetManager相关代码从framework移到packages/modules/…...

极狐GitLab 如何设置访问令牌前缀?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…...

leetcode日记(72)最大矩形

依旧是看了答案才知道大概方法…太难想到了 和上一道题思路相似&#xff01;可以直接调用上题的函数&#xff0c;只不过调用前的准备非常难想到&#xff0c;就是建造形状相同的矩阵&#xff0c;第i行j列的元素是i行中j列前相邻的“1”的个数。 class Solution { public:int m…...

自驾畅游保定:参观总督署,品美食文化

这是学习笔记的第 2490篇文章 前几天跟孩子聊天&#xff0c;孩子说暑假都没出去玩了&#xff0c;暑假旅行的作业咋写&#xff1f;让我有满满的负疚感&#xff0c;去附近的公园、吃点美食不算旅游&#xff0c;得了&#xff0c;得安排一下一日游。 几个月前心心念的去保定&#x…...

我常用的几个傻瓜式爬虫工具,收藏!

爬虫类工具主要两种&#xff0c;一种是编程语言第三方库&#xff0c;比如Python的scrapy、selenium等&#xff0c;需要有一定的代码基础&#xff0c;一种是图形化的web或桌面应用&#xff0c;比如Web Scraper、后羿采集器、八爪鱼采集器、WebHarvy等&#xff0c;接近于傻瓜式操…...

数据分析2 Numpy+Scipy+Matplotlib+Pandas

3.设置坐标范围 mp.xlim(水平坐标最小值, 水平坐标最大值) mp.ylim(垂直坐标最小值, 垂直坐标最大值) 代码&#xff1a;plt3.py 4.设置坐标刻度 mp.xticks(位置序列[, 标签序列]) mp.yticks(位置序列[, 标签序列]) 代码&#xff1a;plt4.py 5.设置坐标轴 坐标轴名&#xff1a;l…...

手机IP地址:是根据网络还是设备决定的?

在日益数字化的今天&#xff0c;手机已经成为我们日常生活中不可或缺的一部分。它不仅是我们沟通的桥梁&#xff0c;更是我们获取信息、享受娱乐和完成工作的得力助手。然而&#xff0c;在使用手机上网的过程中&#xff0c;你是否曾经好奇过手机的IP地址是如何被分配的&#xf…...

数据结构-常见的七大排序

上节中我们学习了七大排序中的五种(插入排序、希尔排序、堆排序、选择排序、交换排序) 数据结构-常见的七大排序-CSDN博客 这节我们将要学习快速排序(hoare、指针法、挖洞法(快排的延伸)、快速排序非递归(栈)) 1.快速排序 1.1 hoare法 1.1思路 1.选出一个key&#xff0c;一…...

离线安装部署springboot+vue系统到服务器

注意&#xff1a;首先服务器会有多个网卡&#xff0c;这些服务器的网卡连接所需要的文件可能不是我们默认的ifcfg-eth0/ifcfgens33,可以试着切换一下服务器网线插入的接口&#xff0c;要保证服务器网线插入的接口和网卡对应的文件一致 说明&#xff0c;在一些政府&#xff08;保…...

【STM32】ADC模拟数字转换(规则组单通道)

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 ADC简介 ADC时钟配置 引脚模拟输入模式 规则组通道选择 ADC初始化 工作模式 数据对齐 触发转换方式 连续与单次转换模式 扫描模式 组内的通道个数 ADC初始化框架 ADC上电 ADC校…...

WPF 数据模板DataTemplate、控件模板ControlTemplate、Style、ItemsPreseter

一言蔽之&#xff0c;Template就是“外衣”—— ControlTemplate是控件的外衣&#xff0c; DataTemplate是数据的外衣。 DataTemplate 它定义了一个数据对象的可视化结构 DataTemplate常用的地方有3处&#xff0c;分别是&#xff1a; ContentControl的ContentTemplate属性&…...

Windows下搭建Telegraf+Influxdb+Grafana(详解一)

InfluxDB&#xff08;时序数据库&#xff09;&#xff0c;常用使用场景&#xff1a;监控数据统计。 grafana&#xff0c;用作监控页面的前端展示。 telegraf&#xff0c;数据采集器。 所有的安装包都上传到网盘 链接: https://pan.baidu.com/s/1Lv6UnfueK7URx7emAatoYg 提取…...

同城搭子社交系统开发同城搭子群活动APP圈子动态小程序

引言 随着互联网技术的飞速发展&#xff0c;同城搭子社交系统作为一种新兴的社交模式&#xff0c;正逐渐在市场中占据一席之地。该系统通过搭子群活动和圈子动态等功能&#xff0c;为用户提供了一种高效、精准的社交体验。本文将从市场前景、使用人群、盈利模式以及运营推广等…...

大厂最佳实践 | Stripe 如何防止重复付款

为什么扣了我两笔钱&#xff1f; 2010年&#xff0c;美国加利福尼亚州的两兄弟打算创办一家公司&#xff0c;但他们发现建立网上支付十分困难。于是&#xff0c;他们决定开发一款在线支付服务&#xff0c;并将其命名为Stripe。 随着用户数量的不断增长&#xff0c;重复付费问题…...

Raspberry Pi Pico 2 上实现:实时机器学习(ML)音频噪音抑制功能

Arm 公司的首席软件工程师 Sandeep Mistry 为我们展示了一种全新的巧妙方法&#xff1a; 在 Raspberry Pi Pico 2 上如何将音频噪音抑制应用于麦克风输入。 机器学习&#xff08;ML&#xff09;技术彻底改变了许多软件应用程序的开发方式。应用程序开发人员现在可以为所需系统整…...

安全自动化和编排:如何使用自动化工具和编排技术来提高安全操作效率。(第二篇)

深入理解Kubernetes环境中的安全自动化与编排&#xff08;第二篇&#xff09; 1. 引言 Kubernetes作为现代容器编排平台的主流选择&#xff0c;正在被越来越多的企业用于部署和管理其容器化应用。在Kubernetes环境中实施安全自动化与编排&#xff0c;既能够提升系统的安全性&…...

HarmonyOS WebView

HarmonyOS WebView Web组件提供基础的前端页面加载的能力&#xff0c;包括加载网络页面、本地页面、html格式文本数据。Web组件提供丰富的页面交互的方式&#xff0c;包括&#xff1a;设置前端页面深色模式&#xff0c;新窗口中加载页面&#xff0c;位置权限管理&#xff0c;C…...

解决elementUI表格里嵌套输入框,检验时错误信息被遮挡

1.表格 自定义错误信息显示div <el-form-item label"租赁价格" prop"supplierId"><el-table-column prop"salePrice" label"销售价" align"center"><template slot-scope"scope"><el-form-…...

Unity读取Android外部文件

最近近到个小需求,需要读Android件夹中的图片.在这里做一个记录. 首先读写部分,这里以图片为例子: 一读写部分 写入部分: 需要注意的是因为只有这个地址支持外部读写,所以这里用到的地址都以 :Application.persistentDataPath为地址起始. private Texture2D __CaptureCamera…...

【5.3 python中的元组】

5.3 python中的元组 Python中的元组&#xff08;Tuple&#xff09;是一种用于存储多个项目&#xff08;可以是不同类型&#xff09;的序列数据结构&#xff0c;但它与列表&#xff08;List&#xff09;不同&#xff0c;主要区别在于元组是不可变的&#xff08;immutable&#…...