| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Integer类----装箱 -> 正文阅读 |
|
[游戏开发]Integer类----装箱 |
1.Integer类的用途????????Integer 一个整型数据用来存储整数,整数包括正整数,负整数和零。将整型数据存储起来,变成Integer对象。这个过程叫装箱,而将Integer对象变成整型数据,这个过程叫做拆箱。 Int是java的原始数据类型,Integer是java为int提供的封装类。且Integer类有两个父类,一个是object 还有一个是? Number抽象类。 2.如何将数据封装成Integer对象? ? ? ? 2.1 装箱 ? ? ? ? ? ? ?方法1:通过new的方式,将数据封装成Integer对象。其中需要封装的数据可以是整型,还可以是纯数字的字符串 ? ? ? ? ? ? ? 方法2:通过Integer.Valueof()方法 示例1:
示例2:
2.2装箱过程(原理)? ? ?2.2.1? ?当需要封装的数据是整型时:?调用Integer类中构造方法将数据传入,并将数据赋值给Integer类中的value成员属性; private final int value-属性value是用private和final关键字修饰了的,因此value属性不允许在类外访问且一旦在构造函数中赋予了初值就不会在改变,因为有final关键字,value是常量。 2.2.2? ?当需要封装的数据是纯数字字符串时:???????? 调用参数是字符串的构造方法 ,将纯数字传入,通过Integer本类中的parseInt()方法将纯数字的字符串转化为整型数字。并将 ? ? ? ? parseint源码转化过程:
2.3自动装箱? ? ? ??不需要是通过new的方式,将数据封装为Integer类型。 示例:
结果: ?????????????????自动装箱成功,但是打印i1==i2,结果为true说明,i1和i2是同一个对象。只有这种说法才能让i1=i2的结果为true.这里就跟自动装箱的低层实现有关了 2.3.1 自动装箱的底层实现????????????????????????自动装箱的底层是通过Integer.valueof()实现的。 ? ? ? ?具体过程: ? ? ? ??
? ? ? ? 通过调用Integer类的内部类IntegerCache这个类中的valueof()方法,将数据与常量low和height比较。但是在IntegerCache这个类中有1个静态代码块,因此在代码块在加载时优先级加载 而这个静态代码块中有一个缓存区,将-128到127之间的数字封装成Integer对象; ? ? ? ? 静态代码块:???????? 首先初始定义的一个局部变量? h = 127,然后定义了一个String类型的变量 ,并调用了系统中虚拟机的方法获取系统中的height的默认值值,将其赋值String变量。????????????????????????????????????????String? ? ? integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); ? 如果获取到的值为空则直接将h的值赋值给height. 如果获取的值不为空,则将该值转化为int类型并赋值给i变量,int??i=parseInt(integerCacheHighPropValue);再将i的值与127比较取最大的一个的值并赋值给i;i = Math.max(i, 127);? 再将i的值与Integer.MAX_VALUE-(low)-1比较,取其中的最小的一个值,目的时为了防止溢出,因为如果取的默认值超过了Integer.MAX_VALUE-(low)-1的值就会发生溢出。但是一般是不会发生,除非修改了虚拟机系统方法的默认值。 h = Math.min(i, Integer.MAX_VALUE - (-low) -1); 最后将h的值赋给height,height = h? 范围(-128--127)cache = new Integer[(high - low) + 1];? ?cache是一个数组,而这个数组是一个Integer类型的数组,其长度为[(height-low)+1];(256) int j = low;将low赋值给j,因为low是一个常量,方便下面的操作。 for(int k = 0; k < cache.length; k++) ?assert IntegerCache.higth>= 127;assert 后跟boolean表达式,如果表达式为True则继续执行 否则抛出异常。在这里不改变系统默认值的情况下,则将继续执行。 ?因此只要输入的值的范围在【-128到127】之间就不会通过new来创建Integer对象,而是通过 IntegerCache? 内部类中的cache[ ]数组中的封装的-128到127个Integer对象来赋值给Integer对象 的引用。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 15:05:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |