【java笔记】泛型、包装类、自动装箱拆箱与缓存机制
一、泛型:类型安全的基石
1. 泛型的本质与原理
Java 泛型(Generics)是 JDK 5 引入的特性,通过类型参数化实现代码的通用性。泛型类、接口和方法允许在定义时声明类型参数(如 T
、E
、K
、V
),这些参数在使用时被具体类型替换。其核心原理是类型擦除(Type Erasure):编译时泛型类型信息被擦除,替换为原始类型(如 Object
),并插入必要的类型转换。运行时 JVM unaware 泛型,仅保留原始类型。
1.1 泛型的核心价值
- 类型安全:编译期检查类型匹配,避免运行时
ClassCastException
。 - 代码复用:通过参数化类型,一个类/接口/方法可处理多种数据类型。
- 消除强制转换:泛型自动推导类型,简化代码(如集合操作)。
// 非泛型时代的集合操作
List list = new ArrayList();
list.add("Hello");
String str = (String) list.get(0); // 强制转换// 泛型时代
List<String> list = new ArrayList<>();
list.add("Hello");
String str = list.get(0); // 无需转换
// 泛型类示例
class Box<T> {private T value;public void set(T value) { this.value = value; }public T get() { return value; }
}// 使用泛型
Box<String> stringBox = new Box<>();
stringBox.set("Java");
String str = stringBox.get(); // 无需强制类型转换
1.2 泛型擦除:运行时的类型透明
- 原理:编译后泛型类型被擦除,替换为原始类型(如
T
→Object
,有界类型→上限类型)。 - 影响:
- 运行时无法获取泛型具体类型(
List<String>
与List<Integer>
运行时类型相同)。 - 不支持基本类型(因擦除后无法区分
int
和Integer
),必须使用包装类。
- 运行时无法获取泛型具体类型(
1.3 泛型的规则与限制
- 类型参数仅支持引用类型:
List<int>
非法,需使用List<Integer>
。 - 通配符(Wildcards):
<?>
:未知类型(等效Object
)。<? extends T>
:上界通配符(允许T
及其子类)。<? super T>
:下界通配符(允许T
及其父类)。
- 多边界限制:
<T extends ClassA & InterfaceB>
(类在前,接口在后)。 - 泛型方法:独立于类的类型参数,静态方法必须声明自己的泛型。
// 泛型方法示例
public static <T> void print(T element) {System.out.println(element.getClass());
}// 通配符应用:遍历任意类型的集合
public static void printCollection(Collection<?> coll) {for (Object element : coll) {System.out.println(element);}
}
1.4 高级应用:泛型与设计模式
- 工厂模式:泛型工厂方法创建类型安全的实例。
- 策略模式:泛型接口定义通用算法(如
Transformer<T, R>
)。 - 容器类设计:实现通用数据结构(如
Stack<T>
、Queue<T>
)。
// 泛型接口与实现
interface Transformer<T, R> {R transform(T input);
}class UpperCaseTransformer implements Transformer<String, String> {public String transform(String input) {return input.toUpperCase();}
}
2. 泛型为何不支持基本数据类型?
- 擦除机制限制:基本类型(如
int
)非对象,无法替换为Object
,而包装类(如Integer
)是引用类型,符合泛型要求。 - JVM 兼容性:JVM 字节码基于对象引用,基本类型需特殊指令处理,泛型支持基本类型会破坏兼容性。
- 结论:泛型中必须使用包装类,依赖自动装箱拆箱实现透明转换。
3. 泛型的优势
- 类型安全:编译期检查类型错误,避免运行时
ClassCastException
。 - 代码复用:一套逻辑处理多种类型,减少冗余。
- 可读性提升:明确类型信息,无需强制转换。
二、包装类与自动装箱拆箱
1. 基本类型与包装类的映射
基本类型 | 包装类 | 缓存范围 |
---|---|---|
byte | Byte | -128 ~ 127 |
short | Short | -128 ~ 127 |
int | Integer | -128 ~ 127(可配置) |
long | Long | -128 ~ 127 |
char | Character | 0 ~ 127 |
boolean | Boolean | TRUE /FALSE |
float | Float | 无缓存 |
double | Double | 无缓存 |
2. 自动装箱(Autoboxing)与拆箱(Unboxing)
- 装箱:基本类型 → 包装类(编译器自动调用
valueOf()
)。 - 拆箱:包装类 → 基本类型(编译器自动调用
xxxValue()
)。
// 自动装箱
Integer numBoxed = 100; // 等价于 Integer.valueOf(100)// 自动拆箱
int numUnboxed = numBoxed; // 等价于 numBoxed.intValue()// 集合中的自动装箱
List<Integer> list = new ArrayList<>();
list.add(200); // 自动装箱为 Integer
int val = list.get(0); // 自动拆箱为 int
3. 装箱拆箱的性能考量
- 频繁操作(如循环中)可能引发性能损耗(对象创建/销毁)。
- 建议:对性能敏感场景(如大数据计算)优先使用基本类型。
三、Integer 缓存机制
1. 缓存原理
Integer
缓存 -128
到 127
范围内的对象(通过静态内部类 IntegerCache
实现)。调用 valueOf()
或自动装箱时:
- 范围内:返回缓存对象(共享引用)。
- 范围外:新建
Integer
对象(堆内存)。
Integer a = 100; // 缓存范围内,共享引用
Integer b = 100;
System.out.println(a == b); // true(引用相同)Integer c = 200; // 范围外,新建对象
Integer d = 200;
System.out.println(c == d); // false(引用不同)
2. 缓存范围的扩展
通过 JVM 参数 -Djava.lang.Integer.IntegerCache.high=255
可扩大缓存上限(如 255),适用于高频使用较大整数的场景。
3. 比较陷阱:==
vs equals()
==
比较引用,缓存范围内为true
,否则为false
。equals()
比较值,始终正确。
Integer x = 127;
Integer y = 127;
System.out.println(x == y); // true(缓存内)Integer m = 128;
Integer n = 128;
System.out.println(m == n); // false(缓存外)
System.out.println(m.equals(n)); // true(值相等)
四、字符串转数字:parseInt
vs valueOf
方法 | 返回类型 | 缓存影响 | 异常处理 |
---|---|---|---|
Integer.parseInt(s) | int (基本类型) | 无(直接返回值) | 抛出 NumberFormatException |
Integer.valueOf(s) | Integer (对象) | 缓存范围内返回缓存对象 | 同上 |
// parseInt:直接获取基本类型
int num1 = Integer.parseInt("123"); // 123// valueOf:返回 Integer 对象(自动拆箱)
int num2 = Integer.valueOf("456"); // 自动拆箱为 int
Integer obj = Integer.valueOf("789"); // 保持包装类// 基数转换(16 进制)
int hex = Integer.valueOf("FF", 16); // 255
最佳实践:
- 需基本类型时优先
parseInt
(避免对象开销)。 - 需对象或利用缓存时用
valueOf
(如频繁小整数场景)。
五、扩展知识:深入理解底层机制
1. 基本类型与包装类的存储位置
- 基本类型:局部变量存栈,成员变量存堆(对象属性)。
- 包装类:对象存堆,引用存栈。
2. 字符串常量池与对象创建
String s1 = "abc"; // 常量池存储
String s2 = new String("abc"); // 堆内存存储,常量池引用
System.out.println(s1 == s2); // false(引用不同)
3. 深浅拷贝与泛型限制
- 浅拷贝:复制引用,共享对象(如默认
clone()
)。 - 深拷贝:递归复制对象,完全独立(需手动实现或序列化)。
- 泛型嵌套限制:受类型擦除影响,Java 不支持复杂嵌套泛型传递,设计 API 时需规避。
六、总结:最佳实践与编码规范
-
泛型使用:
- 优先使用泛型类/方法,避免原始类型。
- 类型参数命名遵循
T
、E
等约定,提高可读性。
-
包装类与缓存:
- 小整数(-128~127)直接赋值(利用缓存)。
- 比较包装类时始终用
equals()
,避免==
陷阱。
-
自动装箱拆箱:
- 避免在循环中高频使用,优先基本类型。
- 集合操作透明处理,无需显式转换。
-
字符串转换:
- 明确需求:基本类型用
parseInt
,对象用valueOf
。 - 处理异常:包裹
try-catch
处理非数字字符串。
- 明确需求:基本类型用
七、代码示例汇总
// 泛型类
class GenericBox<T> {private T value;public void set(T value) { this.value = value; }public T get() { return value; }
}// 自动装箱拆箱与缓存
Integer a = 100; // 缓存内
Integer b = Integer.valueOf(100); // 同上
int c = a + b; // 自动拆箱为 int,计算后装箱// 字符串转换
try {int num = Integer.parseInt("123");Integer obj = Integer.valueOf("456");
} catch (NumberFormatException e) {System.err.println("Invalid number format: " + e.getMessage());
}// 缓存扩展(JVM 参数:-Djava.lang.Integer.IntegerCache.high=255)
Integer x = 200;
Integer y = 200;
System.out.println(x == y); // true(若缓存上限调整为 255)
八、常见面试题解答
-
为什么泛型不支持基本类型?
答:泛型擦除后类型替换为Object
,基本类型非对象,无法赋值。需通过包装类实现。 -
Integer 缓存范围为何是 -128~127?
答:JDK 设计团队认为该范围是日常高频使用的整数,缓存优化性能,超出范围创建新对象以节省内存。 -
自动装箱拆箱的性能影响?
答:单次操作影响可忽略,频繁操作(如循环)建议使用基本类型避免对象开销。 -
如何比较两个 Integer 对象的值?
答:使用equals()
方法,避免==
比较引用(缓存范围内除外)。
参考资料:
- Java 泛型官方文档
- Integer 源码解析
- JVM 类型擦除机制详解
- Java 基本数据类型 vs 包装类
相关文章:
【java笔记】泛型、包装类、自动装箱拆箱与缓存机制
一、泛型:类型安全的基石 1. 泛型的本质与原理 Java 泛型(Generics)是 JDK 5 引入的特性,通过类型参数化实现代码的通用性。泛型类、接口和方法允许在定义时声明类型参数(如 T、E、K、V),这些…...
计算机网络——传输层(TCP)
传输层 在计算机网络中,传输层是将数据向上向下传输的一个重要的层面,其中传输层中有两个协议,TCP,UDP 这两个协议。 TCP 话不多说,我们直接来看协议报头。 源/目的端口号:表示数据从哪个进程来࿰…...
Go 语言规范学习(1)
文章目录 IntroductionNotation示例(Go 语言的 if 语句): Source code representationCharacters例子:变量名可以是中文 Letters and digits Lexical elementsCommentsTokensSemicolons例子:查看程序所有的token Ident…...
深入理解椭圆曲线密码学(ECC)与区块链加密
椭圆曲线密码学(ECC)在现代加密技术中扮演着至关重要的角色,广泛应用于区块链、数字货币、数字签名等领域。由于其在提供高安全性和高效率上的优势,椭圆曲线密码学成为了数字加密的核心技术之一。本文将详细介绍椭圆曲线的基本原理…...
nginx优化(持续更新!!!)
1.调整文件描述符 # 查看当前系统文件描述符限制 ulimit -n# 永久修改文件描述符限制 # 编辑 /etc/security/limits.conf 文件,添加以下内容 * soft nofile 65535 * hard nofile 65535# 编辑 /etc/sysctl.conf 文件,添加以下内容 fs.file-max 655352.调…...
ARCGIS PRO SDK 创建右键菜单
ArcGIS Pro SDK中的弹出式右键菜单常见的在地图视图、布局视图、文件目录等地方,随便右键点击某个文件、要素、要素类,一般都会弹出一个右键菜单。 操作对象右键菜单 refID要素图层esri_mapping_layerContextMenushp图层esri_mapping_unregisteredLaye…...
编译原理——LR分析
文章目录 LR分析概述一、LR分析概述二、LR(0)分析概述(一)可归前缀和子前缀(二)识别活前缀的有限自动机(三)活前缀及可归前缀的一般计算方法(四)LR(0)项目集规范族的构造 三、SLR(1)…...
css100个问题
一、基础概念 CSS的全称及作用是什么?行内样式、内部样式表、外部样式表的优先级?解释CSS的层叠性(Cascading)CSS选择器优先级计算规则伪类与伪元素的区别?举例说明!important的作用及使用注意事项如何继承父元素字体…...
js文字两端对齐
目录 一、问题 二、原因及解决方法 三、总结 一、问题 1.text-align: justify; 不就可以了吗?但是实际测试无效 二、原因及解决方法 1.原因:text-align只对非最后一行文字有效。只有一行文字时,text-align无效,要用text-alig…...
Java-面向对象-多态和抽象类
目录 什么是多态? 多态的优点 多态存在的三个必要条件 虚函数 重写 多态的实现方式 什么是抽象类? 继承抽象类 实现抽象方法 抽象类总结 什么是多态? 多态就是一个行为具有多种不同的表现形式。 举例: 我们按下 F1 键…...
前端性能优化:深入解析哈希算法与TypeScript实践
/ 示例:开放寻址哈希表核心实现 class OpenAddressingHashTable<T> {private size: number;private keys: (string | null)[];private values: (T | null)[];private tombstone Symbol(Deleted);constructor(size: number 53) {this.size size;this.keys …...
车架号查询车牌号接口如何用Java对接
一、什么是车架号查询车牌号接口? 车架号查询车牌号接口,即传入车架号,返回车牌号、车型编码、初次登记日期信息。车架号又称车辆VIN码,车辆识别码。 二、如何用Java对接该接口? 下面我们以阿里云接口为例࿰…...
linux input子系统深度剖析
input 就是输入的意思,因此 input 子系统就是管理输入的子系统,和 pinctrl 、 gpio 子系统 一样,都是 Linux 内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触摸屏等 等这些都属于输入设备,不同的输入设备…...
香蕉派 BPI-CM6 工业级核心板采用进迭时空K1 8核 RISC-V 芯片开发
BPI-CM6 产品介绍 香蕉派BPI-CM6是一款工业级RISC-V核心板,它采用SpacemiT K1 8核RISC-V芯片设计,CPU集成2.0 TOPs AI计算能力。8/16G DDR和8/16/32/128G eMMC。设计了板对板连接器,以增强稳定性,与树莓派CM4尺寸相同,…...
9.4分漏洞!Next.js Middleware鉴权绕过漏洞安全风险通告
今日,亚信安全CERT监控到安全社区研究人员发布安全通告,Next.js 存在一个授权绕过漏洞,编号为 CVE-2025-29927。攻击者可能通过发送精心构造的 x-middleware-subrequest 请求头绕过中间件安全控制,从而在未授权的情况下访问受保护…...
【Unity3D实现UI轮播效果】
系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示👉二、实现步骤👉2-1、搭建UI👉2-2、代码实现👉2-3、代码挂载使用👉三、扩展实现👉壁纸分享👉总结👉前言 功能需求如图所示,点击下一个按钮,所有卡片向右滚动,其中最后一张需要变更…...
谈谈 Webpack 中的 Loader 和 Plugin,它们的区别是什么?
Webpack Loader与Plugin深度解析 作为前端工程化的核心工具,Webpack的Loader和Plugin机制是其强大扩展能力的基石。 理解它们的差异和适用场景,是构建高效打包体系的关键。 我们将从底层原理到实际应用,深入剖析两者的区别。 核心概念对比…...
C#单例模式
单例模式 (Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化对个对象,一个最好的办法就是,让类自身负责保护它的唯一实例。这个类可以保证没…...
Oracle 数据库通过exp/imp工具迁移指定数据表
项目需求:从prod数据库迁移和复制2个表(BANK_STATE,HBS)的数据到uat数据库环境。 数据库版本:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 迁移工具:客户端exp/imp工具 -- 执行命令 从Prod数据库导出数据exp us…...
MongoDB 与 Elasticsearch 使用场景区别及示例
一、核心定位差异 MongoDB 定位:通用型文档数据库,侧重数据的存储、事务管理及结构化查询,支持 ACID 事务。典型场景: 动态数据结构存储(如用户信息、商品详情)。需事务支持的场景…...
PyTorch生成式人工智能实战:从零打造创意引擎
PyTorch生成式人工智能实战:从零打造创意引擎 0. 前言1. 生成式人工智能1.1 生成式人工智能简介1.2 生成式人工智能技术 2. Python 与 PyTorch2.1 Python 编程语言2.2 PyTorch 深度学习库 3. 生成对抗网络3.1 生成对抗网络概述3.2 生成对抗网络应用 4. Transformer4…...
蓝桥杯高频考点——二分(含C++源码)
二分 基本框架整数查找(序列二分的模版题 建议先做)满分代码及思路solution 子串简写满分代码及思路solution 1(暴力 模拟双指针70分)solution 2(二分 AC) 管道满分代码及思路样例解释与思路分析solution 最…...
VUE3项目VITE打包优化
VUE3项目VITE打包优化 代码加密依赖配置效果对比图 自动导入依赖配置 代码压缩依赖配置效果对比图 图片压缩依赖配置效果对比图 字体压缩总结与实践运用效果 代码加密 依赖 npm install -D vite-plugin-bundle-obfuscator配置 import vitePluginBundleObfuscator from "…...
IP 分片重组与 TCP 会话重组
1. IP 分片重组(IP Fragmentation & Reassembly) (1)分片原因 当 IP 数据包长度超过 MTU(Maximum Transmission Unit)(如以太网默认 1500 字节)时,路由器或发送端会…...
《Python实战进阶》No34:卷积神经网络(CNN)图像分类实战
第34集:卷积神经网络(CNN)图像分类实战 摘要 卷积神经网络(CNN)是计算机视觉领域的核心技术,特别擅长处理图像分类任务。本集将深入讲解 CNN 的核心组件(卷积层、池化层、全连接层)…...
【Django】教程-1-安装+创建项目+目录结构介绍
欢迎关注我!后续会更新django教程。一周2-3更,欢迎跟进,本周会更新第一个Demo的单独一个模块的增删改查【Django】教程-4-一个增删改查的Demo【Django】教程-2-前端-目录结构介绍【Django】教程-3-数据库相关介绍 1.项目创建 1.1 安装 Djan…...
力扣DAY29 | 热100 | 删除链表的倒数第N个结点
前言 中等 √ 链表心得:考虑好边界情况。 题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入&#…...
渗透测试过-关于学习Token、JWT、Cookie等验证授权方式的总结
关于学习Token、JWT、Cookie等验证授权方式的总结 目录 一、为什么Cookie无法防止CSRF攻击,而Token可以? 二、为什么无论采用Cookie-session的方式,还是Token(JWT)的方式,在一个浏览器里,同一个…...
C#从入门到精通(3)
目录 第九章 窗体 (1)From窗体 (2)MDI窗体 (3)继承窗体 第十章 控件 (1)控件常用操作 (2)Label控件 (3)Button控件 &…...
greenhill编译出现:3201原因错误
ecom800: 21Mar25 16:26:45.609351: No licenses available for ecom800 Reason: ecom800 (3201): The License Manager cannot be contacted. 解决方式:重新加载lincese驱动。 检查是否安装正确: 检查驱动是否正确识别: 以上检查都正常,…...
Docker 快速入门指南
Docker 快速入门指南 1. Docker 常用指令 Docker 是一个轻量级的容器化平台,可以帮助开发者快速构建、测试和部署应用程序。以下是一些常用的 Docker 命令。 1.1 镜像管理 # 搜索镜像 docker search <image_name># 拉取镜像 docker pull <image_name>…...
RISC-V AIA学习2---IMSIC
我在学习文档这章时,对技术术语不太理解,所以用比较恰当的比喻来让自己更好的理解。 比较通俗的理解: 将 RISC-V 系统比作一个工厂: hart → 工厂的一条独立生产线IMSIC → 每条生产线配备的「订单接收员」MSI 中断 → 客户通过…...
C#基础学习(五)函数中的ref和out
1. 引言:为什么需要ref和out? 问题背景:函数参数默认按值传递,值类型在函数内修改不影响外部变量;引用类型重新赋值时外部对象不变。核心作用:允许函数内部修改外部变量的值,实现“双向传参…...
【每日算法】Day 9-1:贪心算法精讲——区间调度与最优选择(C++实现)
掌握高效决策的核心思想!今日深入解析贪心算法的底层逻辑,聚焦区间调度与最优选择两大高频场景,结合大厂真题与严谨证明,彻底掌握“局部最优即全局最优”的算法哲学。 一、贪心算法核心思想 贪心算法(Greedy Algorit…...
Netty源码—8.编解码原理二
大纲 1.读数据入口 2.拆包原理 3.ByteToMessageDecoder解码步骤 4.解码器抽象的解码过程总结 5.Netty里常见的开箱即用的解码器 6.writeAndFlush()方法的大体步骤 7.MessageToByteEncoder的编码步骤 8.unsafe.write()写队列 9.unsafe.flush()刷新写队列 10.如何把对象…...
【踩坑系列】使用httpclient调用第三方接口返回javax.net.ssl.SSLHandshakeException异常
1. 踩坑经历 最近做了个需求,需要调用第三方接口获取数据,在联调时一直失败,代码抛出javax.net.ssl.SSLHandshakeException异常, 具体错误信息如下所示: javax.net.ssl.SSLHandshakeException: sun.security.validat…...
双目云台摄像头全方位监控方案
双目云台摄像头是一种具有两个镜头的摄像头设备,通常配备云台功能,能够实现水平和垂直方向的旋转,从而提供全方位的监控视角: 一、工作原理与特点 工作原理 :双目云台摄像头利用仿生学原理,通过两个标定后的…...
测谎仪策略思路
来源:【东吴金工 金工专题】“高频价量相关性拥抱CTA”系列研究(四):CPV因子期货版3.0—CPV测谎机 原创 高子剑 量化邻距离 2024年09月20日 14:37 该报告主要介绍了“高频价量相关性拥抱CTA”系列研究中CPV因子期货版的相关内容,…...
2025年移动端开发性能优化实践与趋势分析
启动速度优化 本质:缩短首次可见帧渲染时间。 方法: iOS:利用Core ML本地模型轻量化部署,减少云端等待。Android:强制启用SplashScreen API,通过setKeepOnScreenCondition控制动画时长。冷启动需将耗时操…...
VScode-i18n-ally-Vue
参考这篇文章,做Vue项目的国际化配置,本篇文章主要解释,下载了i18n之后,该如何对Vscode进行配置 https://juejin.cn/post/7271964525998309428 i18n Ally全局配置项 Vscode中安装i18n Ally插件,并设置其配置项&#…...
vue vue3 走马灯Carousel
背景: 在项目中需要展示多张图片,但在页面上只有一张图片的有限位置,此时考虑使用轮播图实现多张图片的展示。element组件官网有走马灯Carousel的组件详细介绍。 实现效果: 官网链接:点击跳转 核心代码: …...
Android设计模式之Builder模式
一、定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、核心思想: 分离构造与表示:将对象的构建过程(如参数组合、校验逻辑)与对象本身分离。 链式调用:通…...
【时时三省】(C语言基础)关系运算符和关系表达式
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 在if语句中对关系表达式disc > 0进行判断。其中的“>”是一个比较符,用来对两个数值进行比较。在C语言中,比较符(或称比较运算符)称为关…...
运算放大器(二)运算放大器的选型与应用
1.运算放大器的工艺决定Vos和Ib 2.TI放大器的命名规律 3.TI精密放大器家族 4.精密运放的选型指南 5.高共模抑制比放大器 6.TI其他的精密放大器 7.选型时需考虑的问题 8.TI精密运放选型实例 先确定供电电压 9.确定放大器的步骤 参考: 注:本文出自对b…...
vulhub靶场jangow-01-1.0.1
启动靶机时点shift停在这个界面 点e进入编辑页面,把ro改成rw signie init/bin/bash Ctrlx保存,ip a查看网卡信息 vim /etc/network/interfaces 把enp0s17改为ens33,保存退出 重启靶机,nmap扫ip ip为192.168.93.179 nmap扫端口 扫…...
android 一步完成 aab 安装到手机
家人们谁懂!在 Android 系统安装 aab 应用超麻烦。满心期待快速体验,却发现 aab 无法直装,得先转为 apks 格式,这过程复杂易错。好不容易转好,还得安装 apks,一番折腾,时间与耐心全耗尽。别愁&a…...
mysqlworkbench导入.sql文件
1、MySQL Workbench 新建数据库 或者 在左侧导航栏的 Schemas 区域右键选择 Create Schema...输入数据库名称(例如 mydatabase),点击 Apply确认创建,点击 Finish 2、选择目标数据库 在左侧导航栏的 Schemas 列表中&a…...
pyqt 信号与槽
PySide6 信号与槽机制详解 引言 PySide6 是 Qt for Python 的官方绑定库,为 Python 提供了强大的 GUI 开发能力。其中,信号与槽(Signals and Slots) 机制是 Qt 事件处理系统的核心,它允许对象之间进行松耦合的通信&a…...
深入探索C++:从基础到实践
目录 引言 一、C 基础语法与特性 (一)命名空间(Namespace) 单独使用 嵌套使用 调用形式 (二)输入输出流(I/O Streams) (三)变量作用域 二、C 的…...
从零开始完成冒泡排序(0基础)——C语言版
文章目录 前言一、冒泡排序的基本思想二、冒泡排序的执行过程(一)第一轮排序(二)第二轮排序(三)第三轮排序(四)第四轮排序 三、冒泡排序的代码实现(C语言)&am…...