代码演示:

public class IntegerTest01 {public static void main(String[] args) {//把100这个数字经过构造方法包装成对象MyInt myInt= new MyInt(100);//doSome()方法虽然不能直接传100,但是可以传一个100对应的包装类型IntegerTest01.doSome(myInt);}public static void doSome(Object obj){System.out.println(obj);}
}

自己建立的包装类:

public class MyInt extends Object{//这种包装类目前是自己手动写的,实际开发中我们不需要自己写//8种基本数据类型对应的8种包装类,SUN公司已经写好了,我们可以直接用int value;public MyInt() {}public MyInt(int value) {this.value = value;}@Overridepublic String toString() {return String.valueOf(value);}
}

需求

调用doSome()方法的时候需要传一个数字进去

问题:
但是数字属于基本数据类型,而doSome()方法参数的类型是Object
可见doSome()方法无法接受基本数据类型的数字

解决:

可以传一个数字对应的包装类进去,达到数据转型的作用

疑问:

什么是包装类

答案:

包装类就是将数据进行包装,然后进行传递的作用

作用:

方便开发

8种基本数据类型对应的包装类型名是什么?

(SUN公司已经写好了)(基本就是对应首字母大写的包装类)

基本数据类型    包装类型

byte                   java.lang.Byte(父类Number)

short                  java.lang.Short(父类Number)

int                      java.lang.Integer(父类Number)

long                   java.lang.Long(父类Number)

float                   java.lang.Float(父类Number)

double               java.lang.Double(父类Number)

boolean             java.lang.Boolean(父类Object)

char                   java.lang.Character(父类Onject)

以上8种包装类中,重点以java.lang.Integer为代表进行学习,其它的类型依葫芦画瓢就行

8种包装类其中6个都是数字对应的包装类,他们的父类都是Number,可以先研究一下Number中公共的方法:

Number是一个抽象类,无法实例化对象

Number类中有几个方法,这些方法是负责拆箱的

术语:

装箱:基本数据类型-->引用数据类型

拆箱:引用数据类型-->基本数据类型

代码演示:

public class IntegerTest02 {public static void main(String[] args) {//基本数据类型-->引用数据类型(装箱)Integer integer=new Integer(100);System.out.println(integer);//引用数据类型-->基本数据类型(拆箱)//.floatValue() 是Integer的父类Number中的其中一个方法float f=integer.floatValue();System.out.println(f);//引用数据类型-->基本数据类型(拆箱)int retValue=integer.intValue();System.out.println(retValue);}
}

结果:(由于Integer中的toString方法已经重写了,因此输出引用的时候就不再是原始的内存地址了)

通过常量获取最大值和最小值:

代码演示:

public class IntegerTest03 {public static void main(String[] args) {System.out.println("int的最大值"+Integer.MAX_VALUE);System.out.println("int的最小值"+Integer.MIN_VALUE);//依葫芦画瓢System.out.println("byte的最大值"+Byte.MAX_VALUE);}
}

结果:

自动装箱和自动拆箱:

代码演示1:

public class IntegerTest04 {public static void main(String[] args) {//自动装箱Integer x=100;//自动拆箱int y=x;}
}

代码演示2:

public class StringTest07 {public static void main(String[] args) {//i是引用类型,这里是自动装箱//等同于Interger i=new Interger(100);Integer i=100;//加号+两边要求是基本数据类型的数字,i是包装类,不属于基本数据类型//这里直接自动拆箱//在java5之后编译器才不会报错System.out.println(i+1);//101Integer a=1000;Integer b=1000;//比较的是内存地址System.out.println(a==b);//flase//结论:只有运算的时候才会自动拆箱,==不属于运算符号,因此不会自动拆箱}
}

代码演示3(面试):

【java中为了提高程序的效率,将[-128-127]之间所有的包装对象提前创建好,放到了一个方法区的“整数型常量池”中,目的是只要用这个区间的数据不需要再new了,直接从整数型常量池中取出来用即可】

public class IntegerTest05 {public static void main(String[] args) {Integer i=128;Integer z=128;System.out.println(i==z);//falseInteger x=127;Integer y=127;System.out.println(x==y);//true}
}

查看源代码:

【源代码中ctrl+f搜索-128,在类初始化的时候,static静态代码块创建出256个对象,存储到catch[]数组缓存中】

代码演示 4:

public class IntegerTest06 {public static void main(String[] args) {//手动装箱Integer x=new Integer(1000);//手动拆箱int y=x.intValue();System.out.println(y);//不是一个数字,可以包装成Integer吗?//不能,运行时会出现异常,编译时不会出现异常//Exception in thread "main" java.lang.NumberFormatException: For input string: "中文"//Integer a=new Integer("中文");//System.out.println(a);}}

图示(类型之间的转换有调用哪些方法):

JAVA进阶教学之(8种包装类)相关推荐

  1. JAVA进阶教学之(集合)

    目录 1.集合概述 2.集合存储的数据类型 3.不同的集合,底层都会对应不同的数据结构 4.集合继承结构图(部分接口和类) 5.Collection接口中常用的方法 6.Collection 集合迭代 ...

  2. JAVA进阶教学之(IO流)

    目录 1.什么是IO流 2.流的分类 3.流的四大家族首领 4.java.io.*包下需要掌握的16个流 5.FileInputStream的实用方法 6.FileOutputStream的方法 7. ...

  3. JAVA进阶教学之(序列化和反序列化)

    目录 1.序列化Serialize和反序列化的概念 2.序列化和反序列化的代码演示: 3.序列化多个对象(序列化集合) 4.transient关键字将部分属性不参与序列化 1.序列化Serialize ...

  4. JAVA进阶教学之(foreach)

    foreach: 概念:就是for循环的一个增强版,可以方便程序员对于数组的直接操作,不用考虑数组下标的情况下进行遍历输出 代码演示: package com.lbj.javase.collectio ...

  5. JAVA进阶教学之(泛型)

    泛型 引言: 泛型:泛型允许程序员在编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型 人话:泛型对规定范围产生约束,约束后只能存储泛型指定的类型 诞生:JDK5.0以后 作用:泛型旨 ...

  6. JAVA进阶教学之(String类的常用方法)

    接下来我们进入的学习章程,就是可以通过查阅帮助文档进行实际的应有 1. char charAt(int index) 返回指定索引的 char价值. 代码示例: public class String ...

  7. JAVA进阶教学之(一维数组)

    1.java语言中的数组是一种引用数据类型.不属于基本数据类型 数组的父类是object 2.数组实际上是一个容器,可以同时容纳多个元素(数组是一个数据的集合) 3.字面意思:数组意味着一组数据 4. ...

  8. JAVA进阶教学之(源码及API文档概述)

    1.JDK类库的根类:Object 这个从老祖宗类中的方法我们需要先研究一下,因为这些方法都是所有子类通用的. 任何一个类默认继承Object 就算没有直接继承,也会间接继承 2.Object类中有哪 ...

  9. JAVA进阶教学之(Enum枚举类)

    首先,我们为什么要学习Enum枚举类 我们引入一段代码: package com.lbj.javase.enumTest;public class EnumTest01 {public static ...

最新文章

  1. 解读MySQL的慢日志
  2. mysql5.7只安装服务端_Windows Mysql5.7.11 服务端安装详解
  3. 从 ELK 到 EFK 演进
  4. mysql 优化语句
  5. 服务器搭建-Linux基础知识
  6. 苹果cms V8模板 黑色自适应电影模板
  7. windows安装卸载mysql
  8. 读取word 图片_Word中快速输入复杂公式
  9. 使用LoadRunner进行性能测试的简单步骤
  10. kafka的发行版选择
  11. 强制卸载pip以及安装老版本pip
  12. 饿了么Redis Cluster集群化演进
  13. 1233850-99-1|2-(4-丙氧基苯基)咪唑[4,5f][1,10]邻菲啰啉|分子式:C22H18N4O-齐岳配体
  14. 左手内容右手科技,讯飞阅读打造适合年轻人的有声阅读APP
  15. imu和mems的差别_MEMS加速度计,磁力计和定向角
  16. 决策树与K-近邻分类随堂笔记(二)
  17. java选择题《每日一练》
  18. matlab用jc法计算可靠度,用MATLAB实现JC法计算结构可靠度程序
  19. Job Statement
  20. 任务1、采用面向对象方式求三角形面积

热门文章

  1. Petya and Staircases CF212div.2B
  2. Delphi中动态调用DLL的方法
  3. Java魔法堂:初探MessageFormat.format和ChoiceFormat
  4. (相当全面)node.js 初体验
  5. 为Visual Studio 2010添加HTML5的项目模板
  6. LPC2000 UART串口使用心得
  7. Leetcode--714. 买卖股票的最佳时间含手续费
  8. Java中关于自增自减
  9. ios笔试题算法_微软笔试题-Dijkstra算法
  10. linux基础操作与实践,Linux操作系统基础与实践