Integer两种不同的赋值方式

本文探讨了Java中Integer类型的缓存机制,解释了为何在特定范围内Integer对象可以直接比较引用,而超出范围的对象则需要使用equals方法进行比较。通过代码示例展示了不同情况下的对象比较结果。
部署运行你感兴趣的模型镜像

前面说了String类型的赋值方式,那么数字类型呢?下面我就拿Integer解析:

 

先看下面一段代码:

 

如果看了前面的对String的讨论,可能大家会质疑c1 == c2的答案,但真实结果就是如此,为什么呢?

看看Debug出来的结果,c1、c2与d1、d2组合的Integer后面的id都是不同的,虽然我并不清楚这个id标志的是什么,但是id,字面意思就是身份标识,既然身份标识不一样,肯定不是同一个人了,最多就是同名的人罢了但是身份证(ID)永远是不同的。

 

 

 

再看看Integer对int的处理方法:

Integer.class -- valueOf(int i)

 

 

IntegerCache.class

 

所以对于c1 == c2 为 false我们也基本有了答案了,与String不同,JDK编译器在程序运行时就把某个范围的数字预编译放进缓冲区(在IntegerCache类中通过静态变量的方式声明,并初始化了值),而不是像String那样在第一次创建对象时创建相应的缓存,在第二次采用原型赋值方式时,就首先从缓冲区拿。

所以Integer num = value,当value不在-128~127这个范围区间时,他就通过new创建不同的对象;当value符合那个区间时,就从开始静态数组中(缓存区)拿,故不会产生新的对象。这估计也是JDK对于内存和效率权衡后确定的范围。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>嗯,用户需要了解VBA中Recordset对象的赋值方式。根据提供的引用资料,特别是引用[3]和[4]中的内容,考虑到Recordset是对象类型变量,赋值时必须使用Set关键字。先确认引用[3]中的关键说明:"给对象变量赋值使用SET,SET不能省略。例如ADODB.RecordSet等对象。" 这直接回答了用户的核心疑问。 再结合引用[4]的代码实例,看到实际应用中有Set rs = CreateObject("Adodb.Recordset")和Set rs = conn.Execute(...)两种典型写法。这里需要强调赋值操作的三种主要场景: 第一种是创建实例时赋值,对应CreateObject方法; 第二种是ADO连接执行SQL命令后返回结果集; 第三种是克隆现有记录集。 用户可能混淆了普通变量和对象变量的赋值差异,需要特别区分。引用[3]中普通变量赋值可以省略Let但对象变量必须用Set的规则很关键。常见错误就是忘记写Set导致"对象变量或With块变量未设置"的运行时错误。 最后整理成结构化的回答,包含赋值语法要点、三种场景示例(创建实例/执行SQL/克隆记录集)、注意事项(Set关键词和对象释放),并添加相关问题帮助用户深入Recordset操作的其他方面。 </think>在VBA中,`Recordset`对象属于**对象变量**,其赋值必须使用`Set`关键字。以下是具体方式和注意事项: ### 📌 赋值方式(必须使用 `Set`) 1. **创建新实例** 通过`CreateObject`或`New`关键字实例化对象: ```vba Dim rs As ADODB.Recordset Set rs = CreateObject("ADODB.Recordset") ' 使用CreateObject ' 或 Set rs = New ADODB.Recordset ' 引用ADODB库时可用New ``` 2. **从数据库操作获取结果集** 执行SQL查询或存储过程后返回`Recordset`: ```vba Dim conn As ADODB.Connection Set conn = New ADODB.Connection conn.Open "连接字符串" Set rs = conn.Execute("SELECT * FROM TableName") ' 执行SQL赋值给Recordset [^4] ``` 3. **克隆现有记录集** 复制已存在的`Recordset`对象: ```vba Dim rsCopy As ADODB.Recordset Set rsCopy = rs.Clone ' 克隆原Recordset对象 ``` --- ### ⚠️ 关键区别与常见错误 - **必须用 `Set`** 对象变量赋值若省略`Set`会触发错误 *"运行时错误91: 对象变量或With块变量未设置"* [^3]。 - **错误示例** ```vba Dim rs As ADODB.Recordset rs = CreateObject("ADODB.Recordset") ' 错误!缺少Set关键字 ``` - **释放对象资源** 使用后需释放对象避免内存泄漏: ```vba Set rs = Nothing ' 显式释放对象 ``` --- ### 📚 引用说明 - 对象变量(如`Recordset`)必须通过`Set`赋值,普通变量(如`String`、`Integer`)则不需要[^3]。 - 数据库操作中`Recordset`通常由`Connection.Execute`或`Command.Execute`返回[^4]。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值