博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
包装类,integer对象,数值型字符串转int类型,装箱,gui查看编译后的class文件,valueof,Integer整数缓存池,比较两个包装类对象
阅读量:3940 次
发布时间:2019-05-24

本文共 1975 字,大约阅读时间需要 6 分钟。

包装类

在这里插入图片描述

integer

int包装类对象创建输出两者的值相同,但是比较两个引用名不同,因为在堆中开辟的是不同地址的内存空间。直接打印输出integer包装类的变量名输出的不是hashcode而是数据,说明integer整型底层重写了toString方法,直接打印输出了integer类型变量的数据。Integer重写了父类object的toString方法。输出不是hashcode是因为底层重写了toString方法。堆内存中比较的是地址值,因此num1==num2为false。

在这里插入图片描述

调用integer方法将数值型"123"类型字符串转为整型,注意“abc”类型非数值型字符串无法转为整型。

在这里插入图片描述

在这里插入图片描述

装箱(int类型数据转为一个包装类的对象)

在这里插入图片描述

查看编译后的class文件

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

装箱通过valueof方法来实现

在这里插入图片描述

将基本类型转换为包装类型

在这里插入图片描述

语法为:包装类型 变量名=包装类型.valueof(基本数据类型 数据)

包装类创建数据存储的地址问题

在这里插入图片描述

在这里插入图片描述

100是常量,存储在常量池中,num1和num2共同指向同一个内存地址,所以num1==num2,而new出的内存存储在堆内存中地址值肯定是不同的

在这里插入图片描述

integer存在常量池,范围在-128-127,超过这个范围,就需要重新在堆中开辟内存空间

在这里插入图片描述

在这里插入图片描述
200超过了127,因此调用方法时会在底层开辟一个新的内存空间
在这里插入图片描述
在静态代码块中初始化整数缓存池
public static Integer valueOf(int i) {//100 200
if (i >= IntegerCache.low && i <= IntegerCache.high)// -128 - 127
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
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++)  // 循环存储数组元素  -128-127            cache[k] = new Integer(j++);      // range [-128, 127] must be interned (JLS7 5.1.7)        assert IntegerCache.high >= 127;    }    private IntegerCache() {}}

==拆箱:将一个包装类对象赋值给一个基本数据类型的变量 ==

在这里插入图片描述
底层利用基本数据类型+value关键字(intValue,doubleValue)

比较两个包装类对象的3种方法(equals,compare和compareTo)

在这里插入图片描述

包装类型转基本类型都是拆箱的操作
在这里插入图片描述

转载地址:http://nknwi.baihongyu.com/

你可能感兴趣的文章
VMware安装Ubuntu系统无法选择语言
查看>>
QT5.12安装
查看>>
Git/Github初步使用记录
查看>>
QT 开发问题合集
查看>>
Github使用问题合集
查看>>
QT多线程服务器
查看>>
Ubuntu 18.04.2 ulimit配置
查看>>
Ubuntu Mysql 安装与配置
查看>>
QT5.12 Mysql驱动未能加载问题
查看>>
现场直击|SequoiaDB@SIGMOD 2021:关注数据库的根科技存储技术
查看>>
赋能政企智慧办公,巨杉数据库与致远互联完成产品互认证
查看>>
SequoiaDB湖仓一体架构亮相 ACM SIGMOD 2021
查看>>
信通院发布第十二批大数据产品能力评测结果,巨杉数据库两款产品通过
查看>>
巨杉数据库荣获2020年度河南省科学技术进步奖
查看>>
湖仓一体提升管理效率 培育数据沃土
查看>>
报名启动!巨杉数据库 2021 湖仓一体技术大赛带你进入分布式技术的星辰大海
查看>>
H2数据库用户自定义函数方法及范例
查看>>
关于系统中使用多个PropertyPlaceholderConfigurer的配置
查看>>
厦大06应用金融硕士研究生推荐精读书目
查看>>
《越人歌》-诗经
查看>>