自动装箱与拆箱:Integer & int

Integer的自动装箱与拆箱 装箱和拆箱 装箱:将基本数据类型转换成封装类型。 拆箱:将封装类型转换成基本数据类型。 自动装箱和自动拆箱 在jdk1.5开始增加了自动装箱和自动拆箱机制,就是为了方便基本类型和封装类型之间的互相转换。 下面来看看自动装箱(拆箱)和显示装箱(拆箱)的例子: Integer a1 = 3; // 自动装箱 Integer a2 = Integer.valueOf(3); // 显示装箱 i... 阅读详情

一、包装类型

Java:面向对象,不过Java中的基本数据类型却是不面向对象的,不过在设计类时为每个基本数据类型设计了一个对应的类进行代表,所以八个和基本数据类型对应的类统称为包装类(Wrapper Class)。包装类均位于java.lang包,包装类和基本数据类型的对应关系如下表所示:

基本数据类型包装类型
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean

二、关于对象

Java是一种面向对象语言,很多地方都需要使用对象而不是基本数据类型。比如,在集合类中,我们是无法将int 、double等类型放进去的。因为集合的容器要求元素是Object类型。为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

三、拆箱与装箱

在Java SE5之前,要进行装箱,可以通过以下代码:

Integer i = new Integer(10);

四、自动拆箱与装箱

从Java SE5中,Java提供了自动拆箱与自动装箱功能。自动装箱: 就是将基本数据类型自动转换成对应的包装类。自动拆箱:就是将包装类自动转换成对应的基本数据类型。 

Integer i =10;  //自动装箱
int b= i;     //自动拆箱

Integer i=10 可以替代 Integer i = new Integer(10); 这就是因为Java帮我们提供了自动装箱的功能,不需要开发者手动去new一个Integer对象。

有如下代码:

int a = 3;
int b = 3;
		
Integer c = 300;
Integer d = 300;
		
System.out.println(a==b);//true
System.out.println(c==d);//false
System.out.println(c.equals(d));//true

反编译后:

int a = integer.intValue(3); 
int b = integer.intValue(3); 

Integer c = Integer.valueOf(300); 
Integer d = Integer.valueOf(300); 

由上可知:自动装箱都是通过包装类的valueOf()方法来实现的.自动拆箱都是通过包装类对象的xxxValue()来实现的。

则源码中valueOf():

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
}

源码中xxxValue():

public byte byteValue() {
    return (byte)value;
}

public short shortValue() {
    return (short)value;
}

public int intValue() {
    return value;
}

public long longValue() {
    return (long)value;
}

public float floatValue() {
    return (float)value;
}

public double doubleValue() {
    return (double)value;
}

五、IntegerCache

Integer下c 和 d 都是300,为什么结果是false,在第四段中有段Integer的valueOf()源码中有一个IntegerCache,先看下它的源码:

private static class IntegerCache {
        static final int low = -128;
        static final int high;
        static final Integer cache[];

        static {
            // high value may be configured by property
            int h = 127;
            String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                try {
                    int i = parseInt(integerCacheHighPropValue);
                    i = Math.max(i, 127);
                    // Maximum array size is Integer.MAX_VALUE
                    h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
                } catch( NumberFormatException nfe) {
                    // If the property cannot be parsed into an int, ignore it.
                }
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);

            // range [-128, 127] must be interned (JLS7 5.1.7)
            assert IntegerCache.high >= 127;
        }

        private IntegerCache() {}
}

在Java 5中,在Integer的操作上引入了一个新功能来节省内存和提高性能。整型对象通过使用相同的对象引用实现了缓存和重用。适用于整数值区间-128 至 +127。只适用于自动装箱。使用构造函数创建对象不适用。当需要进行自动装箱时,如果数字在-128至127之间时,会直接使用缓存中的对象,而不是重新创建一个对象。

其中的Java Doc详细的说明了缓存支持-128到127之间的自动装箱过程。最大值127可以通过-XX:AutoBoxCacheMax=size修改。实际上这个功能在Java 5中引入的时候,范围是固定的-128 至 +127。后来可以通过java.lang.Integer.IntegerCache.high设置最大值。即源码中的这一句话:

在Java中,==比较的是对象应用,而equals比较的是值。所以,在这个例子中,不同的对象有不同的引用,所以在进行比较的时候都将返回false。

 

手把手教你用Matlab搞定GRACE RL06数据读取:冯伟老师工具箱无GUI版实战 本文详细介绍了如何使用Matlab处理GRACE RL06数据,重点解析了冯伟教授工具箱的无GUI版实战操作。通过环境配置、核心函数改造和批处理技巧,帮助科研工作者高效完成重力场数据的读取与分析,特别适合服务器集群环境下的批量处理需求。 阅读详情

相关推荐

电源完整性必看!用SIwave提取PDN阻抗曲线的3个关键设置与常见报错解决

本文深入探讨了在SIwave中进行电源完整性(PI)仿真时,提取PDN阻抗曲线的三个核心设置要点。重点解析了端口阻抗设为0.1欧姆的物理意义与SYZ参数仿真中的阻抗匹配原则,并提供了针对常见收敛性问题和模型误差的实战排查思路,旨在帮助工程师获得更精确可靠的仿真结果,为去耦电容优化提供依据。

b9c0d的博客 352

Integer和int的区别(装箱和拆箱)

Integer的自动装箱和自动拆箱、与int的区别Integer的自动装箱和自动拆箱Integer和int的区别 第一次写博客,因为偶尔看到一道题,自己做错了,所以话了写时间研究了一下,或许存在错误,希望大家指出,相互学习。当是我的笔记,存在博客,以后可以翻看。 Integer的自动装箱和自动拆箱 Integer类包装一个对象中的原始类型int的值。 类型为Integer的对象包含一个单一字段,其...

hjx154954264的博客 1943

webrtc获取IceCandidate流程

foundation:用于唯一标识候选者的基础信息,通常是基于候选者的类型、IP地址、协议和replay协议计算出的字符串。component:标识候选者所属的传输组件。对于RTP流,通常使用1;对于RTCP流,通常使用2。protocol:候选者使用的传输协议,通常是UDP,但也可以是TCP(尽管在WebRTC中UDP更为常见)。priority:候选者的优先级,用于在选择最佳候选对时进行比较。优先级的计算公式考虑了候选类型优先级、本地优先级和组件ID。address:候选者的IP地址。port。

qq_42805085的博客 1901

Integer类自动拆箱,装箱解析

Integer类自动拆箱,装箱解析 1.自动拆箱 例1: int i1 = 10; Integer i2 = new Integer(10); System.out.println(i1 == i2); 这个结果是true i1为基本数据类型值为10,i2为Integer类对象value属性值为10,在进行比较运算时,i2会自动拆箱成int类型然后再与i1进行比较所以结果是true。 所以我们来看一下自动拆箱里面发生了什么,其实非常简单, 在执行i1 == i2时由于i2是包装类和基本数据类型进行比较所

weixin_46120888的博客 2263

在PLC中将十六进制数据转换为浮点数(通常遵循IEEE 754标准)需要理解数据存储格式,并按以下步骤操作:

通过以上步骤,您可以在PLC中实现十六进制到浮点数的转换。T DBD20 // 将数据传送到浮点数变量(如DB1.DBD20)指数位(8位):实际指数 = 存储值 - 127(偏移量)。:必须确认PLC的存储顺序(大端或小端),否则结果错误。将两个16位寄存器合并为32位数据,需注意。尾数位(23位):隐含前导1,实际值为。:确保32位数据在寄存器中连续且对齐。符号位(1位):0表示正,1表示负。:高位寄存器在前(如西门子PLC)。:低位寄存器在前(如三菱FX系列)。,误差因截断导致)。

K11mvp的博客 4417

使用TBtools进行物种间共线性分析

Sequence Toolkit ---Fasta Tools ----ID Prefix (fasta文件)

sunny_dayone的博客 8749

有关包装类,自动拆箱和自动装箱的问题记录

基本类型 基本类型是我们编程中使用最频繁的类型。这种数据的变量不需要使用new创建,他们不会在堆上创建,而是直接在栈内存中存储,因此会更加高效。 包装类型 基本数据类型是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。位于java.lang包 下面...

u014155520的博客 595

信号处理算法:自适应滤波_(8).自适应陷波器

自适应陷波器是一种强大的工具,广泛应用于电力系统、通信系统和生物医学信号处理等领域。通过自适应调整滤波器的参数,自适应陷波器可以在特定频率处形成陷波,从而有效地抑制噪声或干扰信号。常见的自适应算法包括LMS和RLS,它们各有优缺点,可以根据实际需求选择合适的算法。

2401_87715305的博客 1371

Integer自动拆箱装箱及Integer如何实现常量池源码解析

Integer自动拆箱装箱及Integer如何实现常量池源码解析

efggfxfvhh的博客 918

YOLOv11 改进 - C2PSA | C2PSA融合TSSA(Token Statistics Self-Attention)令牌统计自注意力,优化遮挡目标感知

本文介绍了Token Statistics Self-Attention(TSSA)机制,并将其集成到YOLOv11中。传统自注意力计算复杂度高,TSSA进行了范式转变,基于token统计特征实现高效注意力交互。它通过“算法展开”推导得出,以“最大编码率降低”为目标,实现特征学习。TSSA包含动态分组和低秩投影优化两步创新,具备线性复杂度。我们将TSSA代码集成到YOLOv11的C2PSA模块中。实验表明,改进后的YOLOv11在目标检测任务中表现良好,验证了TSSA机制的有效性。

魔改工程师的博客 669

4、高光图像滤镜显著改善文本图像的光学字符识别

本文介绍了高光图像滤镜在光学字符识别(OCR)中的应用,详细探讨了其技术原理、实现步骤和在多种场景下的效果。通过增强文本图像的边缘和对比度,高光滤镜显著提升了OCR的识别率,尤其适用于扫描文档、手写笔记和低质量图像。实验结果表明,该方法在不同类型的文本图像中均表现出色,并提出了未来优化方向,如深度学习集成和多模态融合,为OCR技术的发展提供了新的可能性。

ooo22的博客 95

Integer装箱拆箱、参数传递

(1)JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递。 (2)Integer作为参数传递时引用传递。 举个栗子: public class test{ public void add3(Integer i){ System.out.println("i赋值前的地址:"+System.identityHashCode(i)); i=3...

军威兄的博客 3730

基于simulink的低通滤波器(Low-pass Filter, LPF)

摘要:本文详细介绍了如何在Simulink中搭建低通滤波器进行噪声抑制仿真。通过定义系统需求(50Hz信号+250Hz噪声)、添加信号源、设计6阶巴特沃斯低通滤波器(截止频率100Hz)、连接各模块并配置仿真参数,最终实现高频噪声的有效滤除。该教程包含从模型创建到结果分析的完整流程,为信号处理系统开发提供了基础框架,并可进一步扩展为自适应滤波等高级应用。所需MATLAB版本为R2023a及以上,需安装Simulink和DSPSystemToolbox。

amy_mhd的博客 1303

解锁Integer:从基础到高阶的数值处理秘籍

本文全面介绍了Java中Integer类型的核心知识点与应用技巧。主要内容包括:1)Integer与int的本质区别及自动装箱拆箱机制;2)数值转换方法,包括字符串转换和进制转换;3)数值比较的注意事项,重点分析==与equals的区别;4)特殊操作技巧如补零和位运算的实现;5)实际应用场景,展示Integer在集合框架和数据库操作中的关键作用。文章强调掌握这些技巧对Java开发的重要性,并展望了Integer类型在未来大数据和AI领域的发展潜力,为开发者提供了实用的参考指南。

大雨淅淅的博客 1405

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Integer与Int

在进行描述之前先给出下面代码,观测结果: package com.bjtu.fundation; /** * created by LMR on 2019/6/15 */ public class IntegetTest { public static void main(String[] args) { Integer i = 10; Inte...

LMR的博客 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

int和Integer自动装箱和拆箱

1、int和Integer的区别: int是基本数据类型,直接存储的数值,默认是0 Integer 是int的包装类,是个对象,存放的是对象的引用,必须实例化之后才能使用,默认是null 2、int和Integer比较的特性 == 地址比较 数值类型int自动装箱成对象Integer,实际上是调用了Integer.valueOf(),如果数值范围在-128到127会默认从常量池获取对象,...

just Go! 1065

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Integer与Int,自动装箱和自动拆箱

Integer与Int的比较 Integer是int的包装类,int则是java的一种基本数据类型 。 Integer变量必须实例化后才能使用,而int变量不需要 。 Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 。 Integer的默认值是null,int的默认值是0。 Integer变量和int变量用比较时,只要两个变量的值是相等的,则结果为true。因为包装类Integer和基本数据类型int比较时,java会自动拆

weixin_48035827的博客 1929

自动装箱和自动拆箱:int与Integer(源码详解)

基本数据类型与对象的差别 基本数据类型不是对象,也就是使用int、double、boolean等定义的变量、常量。 基本数据类型没有可调用的方法 int i = 1; //后面没有可以被调用的方法 Integer i = 1;//后面有很多方法可以被调用 int与Integer有什么区别? Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数...

lehek的博客 2609

Java中Integer与int类型的装箱和拆箱

其实Integer与int类型的赋值与比较最关键的一点就是:这两个变量的类型不同。Integer是引用类型,int是原生数据类型。         我们分四种情况来讨论:         1) Integer与int类型的赋值                 a.把Integer类型赋值给int类型。此时,int类型变量的值会自动装箱成Integer类型,然后赋给Integer类型的引用,这

被赶的蜗牛的专栏 1万+

从int和Integer了解自动装箱、自动拆箱制

int 是java的8个原始数据类型(boolean、byte 、short、char、int、float、double、long)之一。Java 语言虽然号称一切都是对象,但原始数据类型是例外。 Integer 是 int 对应的包装类,它有一个 int 类型的字段存储数据,并且提供了基本操作,比如数学运算、int 和字符串之间转换等。在 Java 5 中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java 可以根据上下文,自动进行转换,极大地简化了相关编程。 关于 Integer

pxc_1994的博客 621

(详解)Java中Integer类的自动装箱、拆箱?看这一篇就够了

先看两个小栗子,整片博文围绕这个例子进行详解。 你可以先自己猜猜运行结果,然后再运行代码哦。这样理解会比较深刻。 先一个个来!!!! 栗子1: public class IntegerTest { public static void main(String[] args) { Integer a = new Integer(11); Intege...

xoxo的博客 1972

关于Integer与int拆箱装箱的总结

Integer与int拆箱装箱, Integer部分方法源码解析,拆装箱例子解析。

iFleetingtime的博客 4236

java Integer与int的装箱(缓存)与拆箱

装箱与拆箱的含义: JAVA中的自动装箱指的是把基本类型的值转换为对应的包装类对象,自动拆箱则相反。如下代码所示: Integer i1=100; int i2=i1; 分析如下: Integer i1=100实现了自动装箱,底层调用了调用包装类的valueOf方法,也就是Integer.valueOf(100)。 int i2=i1实现了自动拆箱,底层调用包装类的intValue...

try to do 588

int与integer的比较大小

int与integer的比较大小 Integer是int的封装类,int与Integer比较时,Integer会自动拆箱,无论怎么比,int与Integer都相等, Integer比较时,查看java源代码可知道,在-128与127之间,Integer会自动存在内存中,再有时,直接从内存中去取,不在这个范围则会new新对象,所以Integer与new Integer永远都不相等。 范例 int a=127;int b=127;Integer c = 127;Integer d = new Integ

Jay112011的博客 3071

Java基础:int与Integer区别

int与Integer的基本使用对比 Integer是int的包装类;int是基本数据类型; Integer变量必须实例化后才能使用;int变量不需要; Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; Integer的默认值是null;int的默认值是0。 int与Integer的深入对比 (1)由于Integer变量实际上是对一个Integer对...

TuT 5380

自动装箱与拆箱 基本数据类型与包装类的区别;int 和 Integer 的区别;Integer和int的比较 ; Double和double的区别 面向对象和面向过程的区别

基于上述两点,如果你在普通的定义一个浮点类型的数据,两者都可以,但是Double是类所以其对象是可以为NULL的,而double定义的不能为NULL,如果你要将一些数字字符串,那么就应该使用Double类型了,其内部帮你实现了强转。2、Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)大部分的情况下,这两种类型没有太大得区别。

weixin_44797327的博客 917
上一篇: Java实现文件读取与写入
下一篇: String重写的Equals
West Money
博客等级 码龄9年 7粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值