一、包装类概述

  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. 【java异常】Unable to install breakpoint in

    这个是断点失效,把那个断点双击清理掉就完了. 具体原因,以后再写.

  2. 靶场sql注入练手----sqlmap篇(纯手打)

    靶场地址:封神台 方法一.首先尝试手工找注入点判断 第一步,判断是否存在sql注入漏洞 构造 ?id=1 and 1=1 ,回车,页面返回正常 构造 ?id=1 and 1=2 ,回车,页面不正常,初 ...

  3. PATA1077Kuchiguse

    需要注意的有关于二维字符串数组的输入问题,先是定义要多留一位用于存放'\0' 还有就是使用scanf后,会有回车换行符,如果要使用gets或是接下来的方式代替gets,记得加上getchar,不然会出 ...

  4. 浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法

    浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法 众所周知,把[0,1]区间内的n个随机.相互独立的实数变量\(x_i\)之间的大小关系写成一个排列\(\{p_i\}\),使得\(\f ...

  5. IntelliJ IDEA 2019.2已经可以利用补丁永久破解激活了(持续更新)

    前面的文章中,一直在强调2019系列的idea无法使用补丁进行永久激活,但是最近发现,已经有大佬可以利用补丁将idea 2019.2及以下版本激活到2089年了,而且还不用改hosts,实在是佩服,不 ...

  6. ASP.NET 网站迁移 HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用

    前提:今天要做网站迁移,把A服务器上的网站迁移到B服务器上,A服务器当时的环境是.NET 4.0 ,而B服务器是.NET2.0,A服务器IIS为6.0,B服务器IIS版本为7.0  第一步,先在B服务 ...

  7. CUDA C编程入门

    最近想用cuda来加速三维重建的算法,就先入门了一下cuda. CUDA C 编程 cuda c时对c/c++进行拓展后形成的变种,兼容c/c++语法,文件类型为'.cu',编译器为nvcc.cuda ...

  8. Topshelf 搭建 Windows 服务

    Topshelf 是一个用来部署基于.NET Framework 开发的服务的框架.简化服务创建于部署过程,并且支持控制台应用程序部署为服务.本文基于 .net core 控制台应用程序部署为服务(. ...

  9. day57——视图、模板渲染

    day57 视图 网页:https://www.cnblogs.com/clschao/articles/10409764.html django官方文档:https://docs.djangopro ...

  10. Linux crond任务调度(定时任务),Linux磁盘分区/挂载

    一.crond任务调度 1.基本语法 crontab [选项] -e : 编辑 crontab定时任务 -l : 查询crontab -r : 删除当前用户所有的crontab任务 例子: 每分钟执行 ...