什么是包装类?

在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. 4、注解反射生成SQL语句

    .任务说明         ①有一张用户表,字段包括:用户ID.用户名.昵称.年龄.性别.所在城市.邮箱.手机号:         ②使用java注解来对用户表的每个字段或字段的组合条件进行动态生成S ...

  2. Spring Boot AOP

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是Spring框架中的一个重要内容,它通 ...

  3. 各种id生成策略

    package com.taotao.utils; import java.util.Random; /** * 各种id生成策略 */ public class IDUtils { /** * 图片 ...

  4. Web标准:二、一列布局

    知识点: 1.一列固定宽度 2.一列固定宽度居中 3.一列自适应宽度 4.一列自适应宽度居中 5.一列二至多块布局   1)一列固定宽度 下图是定义了一个高300px,宽400px,颜色是#99FFc ...

  5. 使用spring-data-JPA调用存储过程

    第一种情况,对于只有一个或没有返回值的存储过程,使用如下方式调用: @Entity @NamedStoredProcedureQuery(name = "pro1", proced ...

  6. django的数据库操作回顾

    补充一个filter中大于小于的用法 models.course_info.objects.filter(id__gte=30).delete() _exact 精确等于 like 'aaa' __i ...

  7. Python中类的定义与使用

    目标: 1.类的定义 2.父类,子类定义,以及子类调用父类 3.类的组合使用 4.内置功能 1.类的定义 代码如下: #!/usr/bin/env python #coding:utf8 class ...

  8. [leetcode]228. Summary Ranges区间统计

    Given a sorted integer array without duplicates, return the summary of its ranges. Example 1: Input: ...

  9. 本地Maven环境配置

    本地Maven环境配置 下载配置文件:http://10.1.10.138:6060/root/DevelopmentSpecification/archive/master.zip 解压master ...

  10. svn.SvnX

    1. 使用SvnX的入门 http://www.divvun.no/doc/tools/docu-svn-user-svnx.html 2. SvnX的代码 https://code.google.c ...