我的博客

何为包装类

将原始类型和包装类分开以保持简单。当需要一个适合像面向对象编程的类型时就需要包装类。当希望数据类型变得简单时就使用原始类型。

原始类型不能为null,但包装类可以为null。包装类可用于实现多态性。

通俗的说,为啥要这个东西的存在呢?

首先,我们要知道,Java语言优势就是在于JVM的跨平台机制与面向对象语言的这两大优势。

Java是一个面向对象的编程语言,但是却有一个小小的不足,Java中的八种基本数据类型却是不面向对象的。

那既然不面向对象,就写一个类让这些类型面向对象,于是包装类诞生了。

在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class),包装类均位于java.lang包。

包装类

为了方便记忆,除了IntegerCharacter类以后,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写即可。

对应如下

boolean —> Boolean
char —> Character
byte —> Byte
short —> Short
long —> Long
int —> Integer
float —> Float
double —> Double

如何装箱

public class Demo1 {
public static void main(String[] args) {
int a = 20;
Integer i = Integer.valueOf(a);
Integer j = a;
System.out.println(a + " " + i + " " + j);
}
}

首先,我们先定义一个对象,我们这里是int类型,那我们就直接使用了Integer i,定义了一个对象i,然后我们使用Integer类中的valueOf()方法将基本的int类型a转换成了对象i

此时,这个i是一个对象,携带的int值为20

但是,我们看看,给出的代码中还有一段,Integer j = a,是不是疑惑为什么他没有用valueOf()方法?

这是因为JDK自从1.5版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。

所以,他其实用了这个方法,只是你看不见罢了,我们称之为自动装箱。

输出的值也都一样。这里为了显示自动装箱,所以才去定义了valueOf()

如何拆箱

public class WrapperExample2 {
public static void main(String args[]) {
Integer a = new Integer(3);
int i = a.intValue();
int j = a;
System.out.println(a + " " + i + " " + j);
}
}

拆箱就不多说,使用对象调用intValue()方法即可。

同时他也支持自动拆箱。

演示

public class Demo1 {
public static void main(String[] args) {
int a = 20;
Integer i = Integer.valueOf(a);
Integer j = a;
System.out.println("装箱"+i);
System.out.println("自动装箱"+j); //对上面的j进行拆箱
int x = j.intValue();
int y = j;
System.out.println("拆箱"+i);
System.out.println("自动拆箱"+j);
}
}

运行结果如下:

自动装箱和拆箱与手动没有区别,我们自然平常选择自动啦!

最新文章

  1. sublime text 下的Markdown写作
  2. 使用SwipeListView实现滑动效果
  3. 放在NSArray、NSDictionary等容器内的对象Item,Item中的property在程序运行过程中被无故释放
  4. Thread
  5. job history 的查看
  6. Eclipse--Web项目中 .classpath、mymetadata、project文件的功用
  7. curl命令
  8. iOS网络编程--NSConnection的同步连接与异步连接
  9. Linux使用有线上网教程
  10. Border绘制虚线框(转)
  11. Getting Started with Java
  12. 【HDOJ】5017 Ellipsoid
  13. directive 指令
  14. Android PackageManager基础知识
  15. poj1547---结构数组
  16. java中的异常处理机制
  17. unable to connect to :5555
  18. Codeforces 626F Group Projects(滚动数组+差分dp)
  19. centos7 安装php7
  20. map_server地图服务器

热门文章

  1. [应用软件] VMware Workstation 12.0.0 Pro 正式版下载【附注册机+注册码】
  2. Dubbo 的整体架构设计有哪些分层?
  3. Java 中用到的线程调度算法是什么?
  4. IOC的优点是什么?
  5. SpringDataJdbc命名查询
  6. 解释基于XML Schema方式的切面实现?
  7. BIO、NIO、AIO的区别
  8. Redis 集群会有写操作丢失吗?为什么?
  9. 一个 Redis 实例最多能存放多少的 keys?List、Set、 Sorted Set 他们最多能存放多少元素?
  10. 信号量,semaphore源代码之我见