什么是包装类?

在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菜鸟学习笔记--面向对象篇(十八):对象转型&多态

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

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

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

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

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

  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. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 代码工程地址: https://g ...

  8. Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能

    前面介绍过如何克隆一条当前的记录: Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 主要是通过界面上加一个字段,单击form上的clone 按钮时,改变这个字段的值以触发插件来实现 ...

  9. Dynamic CRM 2013学习笔记(三十五)自定义审批流6 - 审批通过后,再审批 - 二次审批

    最近有个特殊的需求,客户想做二次审批,就是审批通过后,再走一次审批流程.最开始一想,这还不简单,审批通过后,直接把状态改成draft就完了,后来一试,发现一堆问题,比如第一次审批完后,界面是不允许修改 ...

随机推荐

  1. C# window 窗体 保持最前显示

    两句话搞定 [DllImport("user32.dll", CharSet = CharSet.Auto)]  private static extern int SetWind ...

  2. 一步步学会使用SeaJS(转)

    原文出处:一步步学会使用SeaJS 2.0 本文分为以下8步,熟悉之后就能够熟练使用SeaJS,从此之后你的生活会变得更加轻松愉悦! 1.SeaJS是什么? 2.下载并检阅SeaJS 3.建立工程和各 ...

  3. python编程中在ubuntu中安装虚拟环境及环境配置

    1.升级python包管理工具pip pip install --upgrade pip 备注:当你想升级一个包的时候 `pip install --upgrade 包名` 2.python虚拟环境安 ...

  4. Python新手学习基础之运算符——算术运算符

    算术运算符 之前文章在介绍变量类型的时候,其实已经用过了很多算术符,比如+.-.*././/.** 等,除此之外,还有一个符号是之前内容没提到的,就是 % ,用来返回除法余数的运算符号. 假设有变量x ...

  5. 窗口!窗口!- Windows程序设计(SDK)003

    窗口!窗口! 让编程改变世界 Change the world by program 内容节选: 在前边两节课的例子中,我们通过 MessageBox 函数创建一个消息框程序,消息框其实就是用来跟用户 ...

  6. ubuntu下安装phpstrom

    安装JAVA环境包1,下载 java 的 JDK 包,去官网下载(http://www.oracle.com/technetwork/java/javase/downloads/index.html) ...

  7. 怎样在Word中插入代码并保持代码原始样式不变

    怎样在Word中插入代码并保持样式不变 我们有时候需要在word中添加一段我们写的代码,但是把代码粘贴到word文档中之后就发现所有的代码的样子都变了,我们可以采用下边的方法来实现保持代码原来的样式和 ...

  8. WINDOWS+NGINX+DJANGO+FLUP+PYTHON起步~

    参考的文档是 http://blog.163.com/sky20081816@126/blog/static/1647610232010824262695/ 但在实操时,作了更改之后才生效,就是#in ...

  9. java,C#接口与C++的虚基类

    看C#的接口感觉就像C++中继承并实现虚基类的函数方法一样,是OOP编程中表现多态的一种方式.可以参考下面的文章: http://blog.sina.com.cn/s/blog_60ff8f1b010 ...

  10. 栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱[C#]

    原文地址:http://www.cnblogs.com/xy8.cn/articles/1227228.html 一.栈和托管堆      通用类型系统(CTS)区分两种基本类型:值类型和引用类型.它 ...