一、包装类概述

  1、为什么需要包装类

    Java并不是面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。基本数据类型有它的优势:性能(效率高,节省空间)。

   在实际使用中经常需要将基本数据类型转成对象,这时就需要将基本数据类型数据转化为对象。

  2、包装类

  Java 提供了两个类型系统:基本类型引用类型

  使用基本类型在于效率,然后很多情况,需要创建对象使用,因为对象可以做更多的功能。

  

  基本类型对应的包装类

  

基本类型 对应的包装类(位于java.lang包中)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

二、装箱与拆箱

  基本类型与对应包装类对象之间,来回转换的过程称为“装箱”与“拆箱”。

    •  装箱:从基本类型转换到对应的包装类对象;
    • 拆箱:从包装类对象转换到对应的基本类型。

  1、装箱:把基本类型的数据,包装到包装类中(基本类型的数据 -> 包装类)

    构造方法

      Integer(int value) 构造一个新分配的 Integer 对象,它表示指定的 int 值。

      Integer(String s) 构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。传递的字符串,必须是基本类型的字符串,否则会抛出异常 如:"100" 正确;  "a" 抛出NumberFormatException数字格式化异常

    静态方法

      static Integer valueof(int i):返回一个表示指定的 int 值的 Integer 实例。

      static Integer valueof(String a):返回保存指定的 String 的值的 Integer 对象。

  2、拆箱:在包装类中取出基本类型的数据(包装类->基本类型的数据)

    成员方法

      int intValue() 以 int 类型返回该 Integer 的值。

  Demo:

  // 装箱
//构造方法
Integer in1 = new Integer(1);
Integer in2 = new Integer("1"); //静态方法
Integer in3 = Integer.valueOf(1);
Integer in4 = Integer.valueOf("1"); // 拆箱
int i = in1.intValue();

三、自动装箱(auto_boxing)与自动拆箱(unboxing)

  由于经常要做基本类型与包装类之间的转换,从 Java5(JDK1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。

  自动装箱:当把基本数据类型的值,赋值给包装类的变量时,就会自动装箱。

  自动拆箱:把包装类的对象赋值给对应的基本数据类型的变量时,就会自动拆箱。

  注意:自动装箱与拆箱都是只发送在对应类型上。

  Demo:

 Integer i = 3;     // 自动装箱。相当于Integer i = Integer.valueOf(3);
i = i + 5; // 等号右边:将 i 对象转成基本数值(自动拆箱) i.intValue() + 5;
// 加法运算完成后,再次装箱,把基本数值转成对象。

四、包装类的 API

  1、基本类型转换为字符串 String

      a、基本类型的值 + ""    最简单的方法(最常用)

       b、包装类的静态方法 toString(参数)

 static String toString(int i) 返回一个表示指定整数的 String 对象。

       c、String 类的静态方法 valueOf(参数)

 static String valueOf(int i) 返回 int 参数的字符串表示形式。

  2、字符串(String)转换为基本类型

    除了 Character 类之外,其他所有包装类都具有 parseXxx 静态方法可以将字符串参数转换为对应的基本类型。

public static byte parseByte(String s):将字符串参数转换为对应的byte基本类型。
public static short parseShort(String s):将字符串参数转换为对应的short基本类型。
public static int parseInt(String s):将字符串参数转换为对应的int基本类型。
public static long parseLong(String s):将字符串参数转换为对应的long基本类型。
public static float parseFloat(String s):将字符串参数转换为对应的float基本类型。
public static double parseDouble(String s):将字符串参数转换为对应的double基本类型。
public static boolean parseBoolean(String s):将字符串参数转换为对应的boolean基本类型。

   也可以使用 valueOf(xx) 方法,将字符串转换为基本类型。

static Integer valueOf(String s)  返回保存指定的 String 的值的 Integer 对象。 

    注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常。

  3、进制转换(Integer 类型)

System.out.println(Integer.toBinaryString(10));//转为二进制
System.out.println(Integer.toOctalString(10));//转为八进制
System.out.println(Integer.toHexString(10));//转为十六进制

  4、常量值(Byte,Short,Integer,Long,Float,Double)

    MAX_VALUE:代表范围内的最大值;MIN_VALUE:代表范围内的最小值

Integer.MIN_VALUE
Integer.MAX_VALUE

  5、转换大小写(Character对象)

Character.toUpperCase('a')
Character.toLowerCase('T')

  

五、包装类对象的缓存问题

  在编程时大量需要值在-128到127范围之间的Integer对象。如果只能通过new来创建,需要在堆中开辟大量值一样的Integer对象。这是相当不划算的,IntegerCache.cache很好的起到了缓存的作用。

  对于自动装箱这种情况,Byte,Short,Integer,Long:都有缓存对象,范围 -128~127;Character 缓存对象范围 0~127;Boolean 缓存对象范围:true,false。

  Float,Double没有缓存对象。

  Demo1:

 (1)
int a = 1;
int b = 1;
System.out.println(a == b);//true (2)
int c = 130;
int d = 130;
System.out.println(c == d);//true (3)
//自动装箱
Integer a = 1;
Integer b = 1;
System.out.println(a == b);//true a == b比较的也是地址值 a和b指向的是同一个缓存的常量对象 (4)
Integer c = 130;
Integer d = 130;
System.out.println(c == d);//false c == d比较的也是地址值 c和d都是在堆中新建的Integer对象 (5)
Integer a = 1;
Double b = 1.0;
Long c = 1L;
long d = 1L; //System.out.println(a == b);//无法比较,因为对象比较地址,必须是同一种类型或有父子类关系
//System.out.println(a == c);//无法比较,因为对象比较地址,必须是同一种类型或有父子类关系 System.out.println(a == d);// true 因为d是基本数据类型,a才会自动拆箱, int 与 long 比较,可以比较 (6)
Double d1 = 1.0;
Double d2 = 1.0;
System.out.println(d1 == d2);//false Float与 Double没有缓存对象 (7)
Character c1 = '0';//ASCII码,Unicode码:48
Character c2 = '0';
System.out.println(c1 == c2);//true Character c3 = '中';
Character c4 = '中';
System.out.println(c3 == c4);//false

  Demo2:

 Integer i = 1;
Integer j = 1;
System.out.println(i == j);//true Integer i = 128;
Integer j = 128;
System.out.println(i == j);//false Integer i = new Integer(1);//新new的在堆中
Integer j = 1;//这个用的是缓冲的常量对象,在方法区
System.out.println(i == j);//false Integer i = new Integer(1);//新new的在堆中
Integer j = new Integer(1);//另一个新new的在堆中
System.out.println(i == j);//false Integer i = new Integer(1);
int j = 1;
System.out.println(i == j);//true,凡是和基本数据类型比较,都会先拆箱,按照基本数据类型的规则比较

Java 基本类型包装类Wrapper的更多相关文章

  1. 13-03 Java 基本类型包装类概述,Integer类,Character

    基本类型包装类概述 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据.常用的操作之一:用于基本数据类型与字符串之间的转换.基本类型和包装类的对应Byte,Short,Inte ...

  2. java 基本类型包装类

    一 基本类型包装类 1.包装类概述 Java中提供了相应的对象来解决实现字符串与基本数据之间转换问题,基本数据类 型对象包装类:java将基本数据类型值封装成了对象. 8种基本类型对应的包装类如下: ...

  3. java 基本类型包装类,system类,Math类,Assrays类,大数据运算

    实现字符串与基本数据之间转换 将字符串转成基本数据类型方法 例如:将字符串转成成int类型 String str ="123"; int a =Integer.parseInt(s ...

  4. java基本类型包装类之间的值比较问题

    废话不多说,先看代码 Integer a = 2;Integer b = 2;if(a==b){ System.out.println("相等");}else{ System.ou ...

  5. Java基础知识点1:基本类型包装类

    基本类型的包装类 简介 通常来说我们在程序中经常会使用元类型,比如 int data = 1; float data = 2.1F; 但是在有些场景中不能直接使用元类型,比如如果我们想要建立一个int ...

  6. Java基础知识强化64:基本类型包装类的引入

    1. 基本类型包装类概述 (1)将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据. (2)常用的操作的之一:用于基本数据类型与字符串之间的转换. (3)基本类型和包装类的对应 ...

  7. Java基础学习笔记十四 常用API之基本类型包装类

    基本类型包装类 Java中有8种基本的数据类型,可是这些数据是基本数据,想对其进行复杂操作,变的很难.怎么办呢?在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们 ...

  8. 第47节:Java当中的基本类型包装类

    Java当中的基本类型包装类 01 基本数据类型对象的包装类 什么是基本数据类型对象包装类呢?就是把基本数据类型封装成对象,这样就可以提供更多的操作基本数值的功能了. 基本数据类型对象的包装类8个: ...

  9. java学习笔记18(基本类型包装类,system类)

    基本类型包装类 定义:程序界面用户输入的数据都是以字符串类型存储的,如果需要操作这些字符串进行运算,需要转成基本数据类型,这时就要用到基本类型包装类,例: public class Demo { pu ...

随机推荐

  1. php提示Undefined index的解决方法

    我们在做php开发时有时可能会提示Notice: Undefined index: *** on line 249,出现上面这些是 PHP 的提示而非报错,PHP 本身不需要事先声明变量即可直接使用, ...

  2. java的excel表格的导出与下载

    今天做一个java对excel表格的导出和下载的时候,从网络上搜寻了下载的模板,代码如下: 控制层: @RequestMapping(value = "excelOut_identifier ...

  3. 为什么两个一样的对象,用===打印是false

    对象的地址(变量名)存在栈中,对象的引用指向堆中,比较对象的时候,是比较对象的引用是否相等.obj和obj1的引用地址分别指向堆中的两块数据,所以不相等.

  4. 11-散列3 QQ帐户的申请与登陆 (25 分)

    实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式: 输入首先给出一个正整数N(≤10^​5​​),随后给出N行指令.每行指令的格式为:“命令符(空 ...

  5. 有趣的js代码

    for ( ; ; ) { window.alert(" ∧_∧ ババババ\n( ・ω・)=つ≡つ\n(っ ≡つ=つ\n`/ )\n(ノΠU\n何回閉じても無駄ですよ-ww\nm9(^Д^) ...

  6. spring学习-ApplicationContext-spring上下文深入理解

    4月份开始复习一遍spring相关知识.让自己巩固一下spring大法的深奥益处,所以就看了大佬的博客,转载留下来日后继续研读.认为重点的标记为红色 以下文章内容转载自:http://www.cnbl ...

  7. Java判断文件类型

    通常,在WEB系统中,上传文件时都需要做文件的类型校验,大致有如下几种方法: 1. 通过后缀名,如exe,jpg,bmp,rar,zip等等. 2. 通过读取文件,获取文件的Content-type来 ...

  8. 【原创】在windows下使用xampp搭建phpcms v9

    我的操作环境: 操作系统:windows 7       64 位操作系统(有点古老,哈哈) 1.下载php环境和phpcmsv9源代码:phpcms v9 的源码:phpcms_v9.5.10_UT ...

  9. Allowed memory size of 134217728 bytes exhausted问题解决方法

    Allowed memory size of 134217728 bytes exhausted问题解决方法 php默认内存限制是128M,所以需要修改php.ini文件. 查找到memory_lim ...

  10. C++ getline()的两种用法

    getline():用于读入一整行的数据.在C++中,有两种getline函数.第一种定义在头文件<istream>中,是istream类的成员函数:第二种定义在头文件<string ...