我是靠谱客的博主 搞怪小霸王,最近开发中收集的这篇文章主要介绍Java常用类:包装类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、什么是包装类?

就是基本类型所对应的引用类型,包装类的默认值是null

包装类
基本数据类型包装类型
byteByte

short

Short

int

Integer
longLong
floatFloat
doubleDouble
booleanBoolean
charCharacter

基本类型存放在栈中,引用类型存放在堆中。

二、类型转换和装箱、拆箱:

装箱:把基本类型转换成引用类型 把它从栈中转到堆中。

装箱的两种方式:new Integer(i)、Integer.valueOf(i)

拆箱: 拆箱,引用类型转换成基本类型 把它从堆中转到栈中

jdk1.5后,还可以实现自动装箱和拆箱。

看代码:

package com.classes.wapperClass;
public class Demo01 {
public static void main(String[] args) {
//
类型转换:装箱,把基本类型转换成引用类型 把它从栈中转到堆中
int num1 = 18;
Integer integer1 = new Integer(num1);
Integer integer2 = Integer.valueOf(num1);
System.out.println("============装箱成功==================");
System.out.println(integer1);
System.out.println(integer2);
//
拆箱,引用类型转换成基本类型
Integer integer3 = new Integer(100);
int count = integer3.intValue();
System.out.println("============拆箱成功==================");
System.out.println(count);
//
jdk1.5之后,可以实现自动装箱、拆箱
//
自动装箱
int age1 = 30;
Integer integer4 = age1;
System.out.println("============自动装箱成功==================");
System.out.println(integer4);
//
自动拆箱
int age2 = integer4;
System.out.println("============自动拆箱成功==================");
System.out.println(age2);
}
}

运行结果。 

调出.class文件可以发现自动装箱和拆箱的过程:

三、基本类型和字符串之间的转换。

直接看代码:

package com.classes.wapperClass;
public class Demo02 {
//
字符串和基本数据类型之间的转换
public static void main(String[] args) {
//
基本数据类型转换成字符串
System.out.println("-----------------基本数据类型转换成字符串----------------------");
//
1.使用+号
int n1 = 100;
String s1
= n1+"";
System.out.println(s1);
//
2 使用Integer中的toString方法
int n2 = 15;
String s2 = Integer.toString(n2);
System.out.println(s2);
//
还可以调用重写的toString方法,加了一个参数 int radix,表示进制
//
把整数n2转换成16进制,并以字符串形式输出
String s3 = Integer.toString(n2,16);
System.out.println(s3);
System.out.println("-----------------字符串转换成基本数据类型----------------------");
//
字符串转换成基本数据类型
//
使用parseXXX
String str = "150";
int n = Integer.parseInt(str);
System.out.println(n);
//
布尔值类型也可转换
String str1 = "true";
boolean b = Boolean.parseBoolean(str1);
}
}

运行结果:

特别注意,使用parseXXX将字符串转成基本数据类型时,字符串里的必须是数字,否则会抛出异常:

四、关于Integer缓冲区的问题:

先来看一段代码:

package com.classes.wapperClass;
public class Demo03 {
public static void main(String[] args) {
//
两个不同的对象,在堆中存放的地址不同 false 合理
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1==integer2);
//
因为自动装箱引用的是Integer中的valueOf方法,在这个方法中本就定义了一个-127到128数组,100是从里面取的,所以为true.
Integer integer3 = 100;
Integer integer4 = 100;
System.out.println(integer3==integer4);
//
这里false是因为200超出了数组范围,开始引用new Integer(i)的方法,所以它们又不相等了
Integer integer5 = 200;
Integer integer6 = 200;
System.out.println(integer5==integer6);
}
}

运行结果:

第一个integer1和integer2因为是两个不同的对象,再堆中地址不同,所以flase,合理。

integer3和integer4ture的原因就跟Integer缓冲区有关了。

因为它使用的是自动装箱,而自动装箱的原理就是引用了Integer中的valueOf方法,所以我们可以看成这个样子。

我们调出valueOf的源码来看看:

在valueOf方法中:

而这个IntegerCache方法定义的是一个数组, 

再回来看valueOf方法:

当我们的值等于100时,他直接IntegerCache方法中的数组取了一个100值赋给了 integer3和integer4,所以它们相等。

而integer5和integer6的200由于超出了范围,所以它仍然返回的时new Integer(200):

所以和 integer1、2一样,它们是两个不同的对象,所以不相等,flase。

最后

以上就是搞怪小霸王为你收集整理的Java常用类:包装类的全部内容,希望文章能够帮你解决Java常用类:包装类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部