JAVA进阶教学之(8种包装类)
代码演示:
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种包装类)相关推荐
- JAVA进阶教学之(集合)
目录 1.集合概述 2.集合存储的数据类型 3.不同的集合,底层都会对应不同的数据结构 4.集合继承结构图(部分接口和类) 5.Collection接口中常用的方法 6.Collection 集合迭代 ...
- JAVA进阶教学之(IO流)
目录 1.什么是IO流 2.流的分类 3.流的四大家族首领 4.java.io.*包下需要掌握的16个流 5.FileInputStream的实用方法 6.FileOutputStream的方法 7. ...
- JAVA进阶教学之(序列化和反序列化)
目录 1.序列化Serialize和反序列化的概念 2.序列化和反序列化的代码演示: 3.序列化多个对象(序列化集合) 4.transient关键字将部分属性不参与序列化 1.序列化Serialize ...
- JAVA进阶教学之(foreach)
foreach: 概念:就是for循环的一个增强版,可以方便程序员对于数组的直接操作,不用考虑数组下标的情况下进行遍历输出 代码演示: package com.lbj.javase.collectio ...
- JAVA进阶教学之(泛型)
泛型 引言: 泛型:泛型允许程序员在编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型 人话:泛型对规定范围产生约束,约束后只能存储泛型指定的类型 诞生:JDK5.0以后 作用:泛型旨 ...
- JAVA进阶教学之(String类的常用方法)
接下来我们进入的学习章程,就是可以通过查阅帮助文档进行实际的应有 1. char charAt(int index) 返回指定索引的 char价值. 代码示例: public class String ...
- JAVA进阶教学之(一维数组)
1.java语言中的数组是一种引用数据类型.不属于基本数据类型 数组的父类是object 2.数组实际上是一个容器,可以同时容纳多个元素(数组是一个数据的集合) 3.字面意思:数组意味着一组数据 4. ...
- JAVA进阶教学之(源码及API文档概述)
1.JDK类库的根类:Object 这个从老祖宗类中的方法我们需要先研究一下,因为这些方法都是所有子类通用的. 任何一个类默认继承Object 就算没有直接继承,也会间接继承 2.Object类中有哪 ...
- JAVA进阶教学之(Enum枚举类)
首先,我们为什么要学习Enum枚举类 我们引入一段代码: package com.lbj.javase.enumTest;public class EnumTest01 {public static ...
最新文章
- 解读MySQL的慢日志
- mysql5.7只安装服务端_Windows Mysql5.7.11 服务端安装详解
- 从 ELK 到 EFK 演进
- mysql 优化语句
- 服务器搭建-Linux基础知识
- 苹果cms V8模板 黑色自适应电影模板
- windows安装卸载mysql
- 读取word 图片_Word中快速输入复杂公式
- 使用LoadRunner进行性能测试的简单步骤
- kafka的发行版选择
- 强制卸载pip以及安装老版本pip
- 饿了么Redis Cluster集群化演进
- 1233850-99-1|2-(4-丙氧基苯基)咪唑[4,5f][1,10]邻菲啰啉|分子式:C22H18N4O-齐岳配体
- 左手内容右手科技,讯飞阅读打造适合年轻人的有声阅读APP
- imu和mems的差别_MEMS加速度计,磁力计和定向角
- 决策树与K-近邻分类随堂笔记(二)
- java选择题《每日一练》
- matlab用jc法计算可靠度,用MATLAB实现JC法计算结构可靠度程序
- Job Statement
- 任务1、采用面向对象方式求三角形面积
热门文章
- Petya and Staircases CF212div.2B
- Delphi中动态调用DLL的方法
- Java魔法堂:初探MessageFormat.format和ChoiceFormat
- (相当全面)node.js 初体验
- 为Visual Studio 2010添加HTML5的项目模板
- LPC2000 UART串口使用心得
- Leetcode--714. 买卖股票的最佳时间含手续费
- Java中关于自增自减
- ios笔试题算法_微软笔试题-Dijkstra算法
- linux基础操作与实践,Linux操作系统基础与实践