Java教程之包装类详解

1. 包装类概述Java中有8中基本数据类型,分别是:
Java教程之包装类详解

包装类就是这8种数据类型所对应的引用数据类型,分别是:

Java教程之包装类详解
可能有同学会问:Java为什么要给基本数据类型提供对应的引用数据呢?第一,Java是面向对象的语言,给它们设计对应的引用类型,非常符合万物皆对象的设计理念第二,有类,那么就会有属性,会有方法。那么针对这些类型的一些数据操作可以变得更加简单,比如说:如果要根据字节数计算int的取值范围就有些麻烦,但是它的包装类Integer就提供了Integer.MIN_VALUEInteger.MAX_VALUE记录了范围数据第三,Java中集合和泛型作为经常使用的对象,它们只支持引用数据类型,比如说,如果需要使用集合存储int类型整数。那么直接声明集合的泛型为int是不可以的,此时就可以使用它对应的包装类Integer所以结论就是:使用包装类可以方便不同数据类型的相关操作,另外集合也会经常用到包装类!2. 自动装箱既然包装类有很好的使用价值,那么自然就是要创建它们的对象去使用。而自动装箱就是一种可以很方便快捷的拿到它们对象的方式,几种包装类的设计非常相似,这里就以Integer举例Integernum=23;这种直接把基本数据类型的数据值赋值给包装类类型的变量,就是自动装箱。底层会自动调用Integer的valueOf(23)方法,拿到一个Integer对象所以Integer num=23;Interger.valueOf(23);底层都是一样的,推荐使用自动装箱的方式获取对象,这样的代码更加简单、直接3. 自动拆箱和自动装箱相反,自动拆箱指的就是可以将一个包装类对象直接赋值给其对应的基本数据类型变量,例如:Integernum=23

;

inta=num;这种情况就是所谓的自动拆箱,其实底层是调用Integer包装类的intValue()方法,返回了记录的数据值23。以此类推,如果是Double,底层就是调用的doubleValue()方法获取数据值返回4. 常见操作基本数据类型转字符串:静态方法:toString(基本数据类型的数据值),例如:String str = Integer.toString(23);推荐使用String的静态方法:valueOf(基本数据类型的数据值),例如:String str = String.valueOf(20);数值内容的字符串转基本数据类型:调用parseXXX的方法,例如:int num = Integer.parseInt(“66”);注意:如果字符串不是数值内容,而是”a”、”b”、”中”…这样的非数值,就会引发异常:NumberFormatException5. 面试题观察以下代码,说结果Integer a = 127; Integer b = 127; System.out.println(a == b); Integer c = Integer.valueOf(127); System.out.println(a == c); Integer d = new Integer(127); System.out.println(a == d); Integer x = 128; Integer y = 128; System.out.println(x == y);结果分别是:true,true,false,false原因:Integer自动装箱底层会调用valueOf()方法,源代码:publicstaticIntegervalueOf(inti

) {

if (i>=IntegerCache.low&&i<=IntegerCache.high

)

returnIntegerCache.cache[i+ (IntegerCache.low

)];

returnnewInteger(i

);

}
可以看到,会拿数据值和Integer的一个静态内部类IntegerCache类的low属性于high属性做范围判断,其中low的值是-128,high的值是127也就是说,调用valueOf()方法,会判断数据是否在-128~127的范围内。如果在范围内,就从静态内部类IntegerCache的一个cache数组属性中获取一个Integer对象如果不在这个范围内,就是新new一个Integer对象IntegerCache这个静态内部类有一个静态代码块:static

{

// high value may be configured by propertyinth=127

;

StringintegerCacheHighPropValue=VM.getSavedProperty(“java.lang.Integer.IntegerCache.high”

);

if (integerCacheHighPropValue!=null

) {

try

{

h=Math.max(parseInt(integerCacheHighPropValue), 127

);

// Maximum array size is Integer.MAX_VALUEh=Math.min(h, Integer.MAX_VALUE (low) 1

);

}
catch( NumberFormatExceptionnfe

) {

// If the property cannot be parsed into an int, ignore it.

}

}

high=h

;

// Load IntegerCache.archivedCache from archive, if possibleCDS.initializeFromArchive(IntegerCache.class

);

intsize= (highlow) +1

;

// Use the archived cache if it exists and is large enoughif (archivedCache==null||size>archivedCache.length

) {

Integer[] c=newInteger[size

];

intj=low

;

for(inti=0; i<c.length; i++

) {

c[i] =newInteger(j++

);

}

archivedCache=c

;

}

cache=archivedCache

;

// range [-128, 127] must be interned (JLS7 5.1.7)assertIntegerCache.high>=127

;

}
一般情况下,这段代码第一个if不会进入,所以high的值就被赋值127,经过计算,size变量的值就是256第二个if语句的条件通常是可以成立的,所以就创建了一个长度为256的Integer类型数组,通过一个for循环,给这个数组就从-128开始赋值,一致赋值到127结束,刚好是256个至此,内部类中就出现了一个Integer类型数组,缓冲了256个Integer对象,对应的数据范围正好是:-128~127那么通过以上分析可知,只要是通过自动装箱或者valueOf()方法去获取对象,只要数据范围在-128~127,不管获取多少次,都会从数组中去拿缓冲的对象,所以拿到的始终是同一个,所以判断的结果就是true但如果不在这个范围内,就是去new一个新的Integer对象,会开辟一个新的对象空间,地址值肯定不一样,所以结果就是false

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:Java教程之包装类详解 https://www.dachanpin.com/a/cyfx/11705.html

(0)
Java教程:防缓存穿透利器-布隆滤器(BloomFilter)
上一篇 2023-05-12 03:37:03
Java教程:MyBatis进阶之自定义MyBatis框架
下一篇 2023-05-12 03:38:06

相关推荐

  • 北京市新源佳合有限公司水晶画 小成本创业项目备受追捧

      核心提示:北京市新源佳合有限公司水晶画,小成本创业项目备受追捧。北京新源佳合水晶画经过多年的发展,创立了我国优秀的水晶画品牌,受到了广大创业者的一致追捧,成为了当代创业的热门选择。据了解,北京新源佳合水晶画是一个小成本创业项目,也是一个可以在家完   了解到北京新源佳合水晶画是一个小成本创业项目,也是一个可以在家完成的创业项目,这对于很多缺少资金,又或者…

    2023-05-13
    166
  • 看秦始皇、汉高祖、成吉思汗、毛主席是如何创业的

    看秦始皇、汉高祖、成吉思汗、毛主席是如何创业的!【必读】 来源:北京大教育考试评价中心 原标题:看秦始皇、汉高祖、成吉思汗、毛主席是如何创业的!【必读】 很多事情,看似隔行如隔山,但隔行不隔理。比如,闹革命,打天下,建立政权同经营企业,二者内在的道理却有着很多相似之处,因为无论是打天下,还是经营企业,都是一个创业的过程,而这个过程都是由领袖带领追随者完成的。…

    2023-05-23
    183
  • 10月30日硬创者不能错过硬件创业供需对接大会

      让你   团队够硬、市场够硬   论坛嘉宾:知名智能硬件公司负责人   让天下没有难做的硬件   更有从方案设计到PCB、模具、测试组装、零部件等硬件创业所需的所有优质供应链厂商。 与硬蛋一同携手,为创业者提供最优惠的政策,以及最优质的资源!更有1亿补贴喂饱你。   活动当天,多家著名投资机构、供应链厂商、硬蛋供应链专家将全天坐班硬蛋空间,如果你有好项目…

    创业分享 2023-06-16
    171
  • 米优购布局全国 开创母婴创业服务立体体系

     据《2016-2021年中国母婴市场前瞻与投资战略规划分析报告》显示,随着国民生活水平的提升和消费理念的升级,国内孕婴童市场规模逐年扩张。毋庸置疑,孕婴童行业在拉动国民经济生产总值中正发挥不可小觑的作用。孕婴童既是朝阳产业,因其在国内市场初具规模,又是红利产业,因其受益于近年婴儿出生率的递增。在孕婴童行业整体年增长率超20%的情况下,行业发展必将走上品牌化…

    创业分享 2023-06-15
    156
  • 艾特说接力演讲 创客分享独家创业经验及研讨VR未来

      6月21日,作为全年“艾特说接力演讲”系列,我们邀请了2位不同领域的小伙伴,用30分钟演讲的形式,分享他们对未来的一些心得体会。   李文雄:从ME定制创业失败爬起展向未来 李文雄   李文雄是深圳易动网云科技有限公司创始人。24岁开始,他从事IT工作,先后进入IBM和VMware多家跨国公司工作,专注云计算及business/IT consulting…

    2023-05-22
    229

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

工作时间:周一至周五,9:30-16:30,节假日休息