什么是包装类?

在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。

  • 包装类对应关系

  • 包装类均位于java.lang包






  • 包装类的用途
      • a、作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。
      • b、包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。


Auto-box自动装箱功能

什么是Auto-boxing?

首先不说定义,先假设没有Autoboxing和unboxing功能,我们使用包装类就如同一般类一样

这样我们创建对象就要这样:

//1.用平时创建类的方法创建包装类
int x=100;
Integer w_x=new Integer(1000);//符合先声明new对象 double z=500.567;
Double w_z=new Double(456.789); float f='Y';
Float w_f=new Float('Y'); String w_s=new String("yes");

然后我们如何返回实例的值呢?当然用到方法了:

//2.返回这些的值
System.out.println("----------------");
System.out.println("w_x="+w_z.intValue());
System.out.println("w_z="+w_z.doubleValue());
System.out.println("w_f="+w_f.floatValue());
System.out.println("w_s="+w_s);
/*输出:
w_x=456
w_z=456.789
w_f=89.0
w_s=yes
*/

是不是很麻烦?不麻烦?那就让我们见识一下Autoboxing和unboxing的优点,在JDK1.5之后,有了这个特性

当我们需要使用包装类时候,在语法上首先可以和基本类型一样,但是因为类又有很多方法可以使用,所以

包类的功能增强了不少如下:

//4.JDK 1.5之后的AutoBOX功能
//如基本类型一样复制,自动装箱供转换为 new Integer(xxx);
Integer l1=100;
Double d1=789.123;
Character c1='n';
Boolean b1=false;//只能true或者false
String s1="Auto-box"; //直接拆箱子
System.out.println("----------------");
System.out.println(l1);
System.out.println(d1);
System.out.println(c1);
System.out.println(b1);
System.out.println(s1);
/*输出:
----------------
100
789.123
n
false
Auto-box
----------------
*/

是不是很方便?在赋值时候有了这个特性,编译器自动帮我们完成一些工作。

自动装箱也存在一些特殊性,例如在用"=="我们可以比较两个基本类型是否相等,

那么我们能不能用此比较包装类是否相等呢?

//1.包装类用== 比较大小
System.out.println("----------------");
System.out.println("Integer(2)是否等于Integer(2)? "+(new Integer(2)==new Integer(2)));
//输出 false ,引用类型用==判断只有指向同一个对象才返回true //Auto-box情况下的不同情形
Integer i5=3;
Integer i6=3;
System.out.println("I6是否等于I5? "+(i6==i5));//返回true Integer i7=128;
Integer i8=128;
System.out.println("I7是否等于I8? "+(i7==i8));//返回false
/*为什么返回false?
因为Auto把-128~127证书自动装箱为一个Integer实例,还放入一个数组
因此每次赋值在这个范围总是指向这个实例的这个数字,所以指向一个地址,
超过这个范围就要重新创造new一个新的实例
*/
System.out.println("----------------");
----------------
Integer(2)是否等于Integer(2)? false
I6是否等于I5? true
I7是否等于I8? false
----------------

正如注释所说,因为引用型用"=="判断相等的准则是是否指向同一个对象。

我们一般用compare()方法比较两个数的大小关系如下:

	//2.用compare方法比较大小
System.out.println("Integer.compare(5,5)="+Integer.compare(5,3));//前>后返回1
System.out.println("Double.compare(789.321,123.789)="+Double.compare(789.123,123.789));
System.out.println("Boolean.compare(true,true)="+Boolean.compare(true,true));
/*
Integer.compare(5,5)=1
Double.compare(789.321,123.789)=1
Boolean.compare(true,true)=0
*/

在Autoboxing中,我们可以进行运算或者转换

/5.包装类的一些方法
//利用包装类构造器和静态方法实现字符串与Integer的转换 System.out.println("----------------");
String s2="123"; int it1=Integer.parseInt(s2);
int it2=new Integer(s2);
System.out.println("it1="+it1+" it2="+it2); String s3="563.236"; float ft1=Float.parseFloat(s3);
float ft2=new Float(s3);
System.out.println("ft1="+ft1+" ft2="+ft2);
/*
----------------
it1=123 it2=123
ft1=563.236 ft2=563.236
*/ //6.基本类型转换为字符串 System.out.println("----------------");
String s4=String.valueOf(123.456f);
System.out.println("s4="+s4);
String s5=String.valueOf(636.56);
System.out.println(s5);
String s6=String.valueOf(true);
System.out.println(s6);
/*
----------------
s4=123.456
636.56
true
----------------
*/
//7.包装类型的运算
int i99=10;
Integer i9=789;
Double d9=i9+789.652;//自动拆箱
System.out.println(d9);
Short s9=123;
Double d10=(double)i9+(double)s9;//不进行转换的话会提示并非Double型,不能通过编译
System.out.println(d10);

总结:

在许多情况下包装与解包装是由编译器自行完成的,给编码者带了很多便利性。

作者:YangGan

出处:

http://blog.csdn.net/incyanggan

本文基于
署名 2.5 中国大陆
许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan
(包含链接).



Java菜鸟学习笔记()--面向对象篇(七):Wrapper Class包装类的更多相关文章

  1. Java菜鸟学习笔记--面向对象篇(十五):Wrapper Class包装类

    什么是包装类? 在Java里一切都是对象,除了Java中的基本数据类型(byte,short,int,long,char,float,double,boolean)不是面向对象的,这在实际使用时存在很 ...

  2. Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态

    Polymorphism[多态] 简述: 面向对象多态性指的是:发送消息给某个对象,让该对象自行决定响应何种行为. 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用 多态的三个前提条件: 多 ...

  3. Java菜鸟学习笔记--面向对象篇(十六):Object类方法

    Object类 什么是Object类? Object类是所有Java类的祖先,每个类都使用 Object 作为超类,所有对象(包括数组)都实现这个类的方法Object类是类层次结构的根,Object类 ...

  4. Java菜鸟学习笔记--数组篇(三):二维数组

    定义 //1.二维数组的定义 //2.二维数组的内存空间 //3.不规则数组 package me.array; public class Array2Demo{ public static void ...

  5. Java菜鸟学习笔记--数组篇(二):数组实例&args实例

    基本类型实例 //1.定义一个一维数组,先声明,在分配空间 int []number;//生命,没有初始化,number=null number=new int[5];//初始化为默认值,int默认值 ...

  6. Java菜鸟学习笔记--Exception篇(一):异常简介

    什么是异常(Exception)? 简述: 在运行过程中,应用程序可能遭遇各种严重程度不同的问题.异常提供了一种在不弄乱程序的情况下检查错误的巧妙方式.它也提供了一种直接报告错误的机制. 不同类型异常 ...

  7. Java菜鸟学习笔记(23)--继承篇(二):继承与组合

    组合是什么 1.继承和组合都是一种随思想渗透而下的编码方式,其根本目的都是为了复用类,减少重复代码 2.要实现一个类的复用,可以分为组合语法和继承语法 3.组合就是通过将一个对象置于一个新类中,将其作 ...

  8. java web学习笔记-Servlet篇

    Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...

  9. java web学习笔记-jsp篇

    1.java web简介 1.1静态页面与动态页面   表现形式 所需技术 静态网页 网页内容固定,不会更新 html,css 动态网页 网页内容由程序动态显示,自动更新 html,css,DB,ja ...

随机推荐

  1. Android图形动画

    一.动画基础 本质 每帧绘制不同的内容. 基本过程 开始动画后,调用View的invalidate触发重绘.重绘后检查动画是否停止,若未停止则继续调用invalidate触发下一帧(下一次重绘),直到 ...

  2. AKKA集群中的分布式发布订阅

    集群中的分布式发布订阅 如何向一个不知道在哪个节点上运行的actor发送消息呢? 如何向集群中的所有actor发送感兴趣的主题的消息? 这种模式提供了一个中介actor,akka.cluster.pu ...

  3. Null Hypothesis and Alternate Hypothesis

    1.Null Hypothesis Overview 零假设,H0是普遍接受的事实;这与备择假设(alternate hypothesis)正好相反.研究人员努力否定.驳斥零假设.研究人员提出了另一种 ...

  4. python+webdriver,选取Select下拉框中的值

    在选择下拉框中的值时遇到了困难,用driver.find_element_by_id("").send_keys("")进行赋值不能成功获取下拉框中的值.   ...

  5. Web标准:六、html列表

    Web标准:六.html列表 知识点: 1.ul无序和ol有序列表 2.改变项目符号样式或用图片定义项目符号 3.横向图文列表 4.浮动后父容器高度自适应 5.IE6的双倍边距bug   1)ul无序 ...

  6. struts2标签类别

    要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@taglib prefix="s" uri="/struts ...

  7. VB 共享软件防破解设计技术初探(一)

    VB 共享软件防破解设计技术初探(一) ×××××××××××××××××××××××××××××××××××××××××××××× 其他文章快速链接: VB 共享软件防破解设计技术初探(二)http ...

  8. android笔记:BroadcastReceiver

    android允许应用程序自由地发送和接收广播. 广播是通过Intent进行数据传递的.接收广播则通过Broadcast Receiver(广播接收器)实现. 广播分为:标准广播和有序广播. 标准广播 ...

  9. Py2exe——将python程序变成windows下可执行的exe

    一.安装Py2exe 二.定义一个目录,把你的Python文件放在下面,如为AddFileRandom.py文件 然后新建一个go.py文件,放于相同目录下,内容为: from distutils.c ...

  10. 33. Search in Rotated Sorted Array旋转数组二分法查询

    一句话思路:反正只是寻找一个最小区间,断开也能二分.根据m第一次的落点,来分情况讨论. 一刷报错: 结构上有根本性错误:应该是while里面包括if,不然会把代码重复写两遍,不好. //situati ...