怎么申请免费的网站,软件定制一般多少钱,网站加载流量,成都的科技公司有哪些在刚刚学习java的时候#xff0c;老师不止一次的说过java是一种面向对象的语言#xff0c;万物皆对象。对于java中的基础数据类型#xff0c;由于为了符合java中面向对象的特点#xff0c;同样也有其封装类。这篇文章对其有一个认识。一、基本认识其实在jdk1.5之前#xf…在刚刚学习java的时候老师不止一次的说过java是一种面向对象的语言万物皆对象。对于java中的基础数据类型由于为了符合java中面向对象的特点同样也有其封装类。这篇文章对其有一个认识。一、基本认识其实在jdk1.5之前在基础数据类型与其封装器之间的转化必须手动进行但是从jdk1.5之后由于提供了自动装箱的机制因此我们不再手动进行了。装箱基础类型转封装类型。Integer a 3底层实现Integer a Integer.valueOf(3);拆箱封装类型转基础类型。int b a底层实现int b a.intValue();既然封装类能够封装基础类型那么能封装的范围是多少呢基本类型封装器字节数最大值最小值byteByte1byte2^7 - 1-2^7shortShort2byte2^15 - 1-2^15charCharacter2byte2^16 - 10intInteger4byte2^31 - 1-2^31longLong8byte2^63 - 1-2^63floatFloat4byte3.4e381.4e-45doubleDouble8byte1.8e3084.9e-324booleanBoolean1byte/4byte/不明确--我们对其进行了一个总结。不过我们应该注意到boolean类型没有给出精确的定义可能是一个字节也有可能是四个字节这是为什么呢java虚拟机规范中规定的是4个字节但是不同的厂家虚拟机可能不同所以可能不会按照规范来。以上这张图想必我们都不陌生每一种基础类型都有一个唯一的封装类。而且也给出了字节数、最大值最小值等。下面我们就看一下其基本使用public 二、基础类型与封装类的区别1、传递方式不同基本类型是按值传递而封装类型是按引用传递的。int是基本类型直接存放数值Integer类会产生一个对象引用指向这个对象。2、存储位置不同基本类型存储在栈中封装类的引用存储在栈中而值是存在堆中。这样看上去好像基础封装类多此一举而且基本类型的速度也确实会比封装类更快。为什么快呢这是因为封装类涉及到了对象内存的分配和垃圾回收。但是基本类型直接拿起来就计算了。三、源码分析在讲解源码之前我们先给出一个神奇的例子请看下面的代码public 第一种情况感觉和第二种情况一模一样呀为什么第二种是false呢想要知道原因我们就必须要深入到源码中找寻答案。public 也就是说在合理表示范围之内就直接拿出来一个旧的数据如果不在表示范围之内那就创建一个新的。但是对于源码的了解不能仅限于此。我们还是按部就班的分析下面我们以Integer封装类为例。1、参数//最小值-2147483648
2、方法//方法1将字符串参数解析为有符号的整数
3、缓存上面支持给出了一些基本的使用方法不过最核心的还是缓存范围的实现。下面我们看一下private 上面这些代码能看懂最好看不懂我来描述一下大概意思这是一个静态内部类类中定义一个静态cache数组这个静态数组预先放了自己指定范围内的数据拆箱的时候首先判断范围然后从缓存数组中去抓取数据。就是这么一个简单的过程。四、使用场景上面分析了这么多最主要的还是如何使用在什么地方使用。下面我们就总结几个场景1、类型之间的转换:String 2、泛型中使用List为原始类型不指定元素类型时会出现不安全的警告List is a raw type. References to generic type ListE should be parameterized大概意思就是List的中应该指定清楚是那种类型如Integer、String等。3、强制类型转换4、集合中使用public 这种情况下会出现空指针异常。OK。今天的文章先到这里如有问题还请批评指正。