Java中特殊的类——包装类
Java中特殊的类——包装类
包装类就是将基本数据类型封装在类中。
1、包装类
(1)自定义包装类
将基本数据类型包装成一个类对象的本质就是使用Object进行接收处理。
此时IntDemo类就是int的包装类,利用intValue 可实现基本数据类型转化为对象的需求。
|
//自定义int包装类 class IntDemo{ private int number; public IntDemo(int number){ this.number = number; } public int intValue(){ return this.number; } } public class Demo { public static void main(String[] args) { //向上转型 Object object = new IntDemo(20); //向下转型 IntDemo intDemo = (IntDemo)object; System.out.println(intDemo.intValue()); } } |
|
运行结果: |
(2)Java提供包装类
对象型(Object的直接子类):Boolean(boolean)、Character(char)
数值型(Number的直接子类):Byte、Double、Short、Long、Integer(int)、Float.
2、装箱与拆箱
(1)包装类和基本数据类型之间存在的关系:装箱与拆箱
装箱:将基本数据类型转变为包装类对象,利用包装类提供的构造方法实现装箱处理。
拆箱:利用Number提供的六种方法将包装类中的包装的基本数据类型取出。
在jdk5之前采取的是手工拆装箱的机制
|
//手动装箱 Integer num = new Integer(20); //拆箱 int data = num.intValue(); |
在jdk5之后提供了自动拆装箱的机制,更为重要的是,由于此机制的存在可以直接利用包装类的对象进行各种数学运算。
|
//自动装箱 Integer num1 = 10; //直接利用包装类对象操作 System.out.println(num1++ *5); System.out.println(num1); |
(2)包装类中“==”和equals问题(推荐使用equals进行比较)
|
public class Demo { public static void main(String[] args) { Integer num10 = -129; Integer num11 = -129; System.out.println(num10 == num11); System.out.println(num10.equals(num11)); System.out.println(); Integer num12 = -128; Integer num13 = -128; System.out.println(num12 == num13); System.out.println(num12.equals(num13)); System.out.println(); Integer num2 = 18; Integer num3 = 18; System.out.println(num2 == num3); System.out.println(num2.equals(num3)); System.out.println(); Integer num6 = 127; Integer num7 = 127; System.out.println(num6 == num7); System.out.println(num6.equals(num7)); System.out.println(); Integer num4 = 128; Integer num5 = 128; System.out.println(num4 == num5); System.out.println(num4.equals(num5)); } } |
|
|
综合上面的代码不难看出:自动装箱 Interger 变量名 = ?在-128——127取值时,“==”和equals的判断结果相同,而超过此范围则用“==”进行判断会出错。
这是因为在“-128——127”范围内Interger对象IntergerCache.cache池上产生,会复用已有对象,而超过此范围,则在堆上产生而并不会复用已有对象。
3、字符串与基本类型的转换
(1)字符串转换成基本数据类型
以后要进行各种数据输入时一定都需要字符串类型来接收,那么如何将字符串转化成基本数据类型就需要包装类的支持。
String ->int(Interger类):public static int parseInt(String s) throws NumberFormatException
String ->doule(Double类):public static double parseDouble(String s) throws NumberFormatException
String ->boolean(Boolean类): public static boolean parseBoolean(String s)等.
|
public class Demo { public static void main(String[] args) { String str2 = "true"; boolean bol = Boolean.parseBoolean(str2); System.out.println(bol); String str3 = "true1"; boolean bol1 = Boolean.parseBoolean(str3); System.out.println(bol1); String str = "4737284992"; double dou = Double.parseDouble(str); System.out.println(dou); String str1 = "47372@84992"; double dou1 = Double.parseDouble(str1); System.out.println(dou1); } } |
|
|
注意:将字符串转化成数字时,若字符串中存在非数字字符,则会出现NumberFormatException异常。而字符串与Boolean转换不受此影响。
(2)基本数据类型转换成String
任何数据类型使用了“+”连接空白字符就会变成字符串类型。
使用String类中提供的valueOf()方法,也可将其转换成字符串(该方法不产生垃圾)
|
public class Demo { public static void main(String[] args) { //基本数据类型->String String str1 = String.valueOf(100); String str2 = String.valueOf(false); System.out.println(str1); System.out.println(str2); String str3 = 100521+""; System.out.println(str3); } } |
|
|
Java中特殊的类——包装类的更多相关文章
- java中基于TaskEngine类封装实现定时任务
主要包括如下几个类: 文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 ...
- Java中基本数据类型和包装类
参考:深入剖析Java中的装箱和拆箱; Java中基本数据类型和包装类互转中 缓冲机制的使用; java学习笔记:装箱和拆箱,包装器和缓冲池 Java 各 类型数据在内存中分配情况详解 一 java内 ...
- 带有静态方法的类(java中的math类)
带有静态方法的类通常(虽然不一定是这样)不打算被初始化. 可以用私有构造函数来限制非抽象类被初始化. 例如,java中的math类.它让构造函数标记为私有,所以你无法创建Math的实例.但Math类却 ...
- java中的File类
File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...
- Java基础(43):Java中的Object类与其方法(转)
Object类 java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. O ...
- Java中的Unsafe类111
1.Unsafe类介绍 Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty.Hadoo ...
- Java中遍历实体类(处理MongoDB)
在实际过程中,经常要将实体类进行封装,尤其是处理数据库的过程中:因此,对于遍历实体类能够与数据库中的一行数据对应起来. 我是使用的环境是Spring boot,访问的数据库时MongoDB 实体类遍历 ...
- java中遍历实体类,获取属性名和属性值
方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...
- Java中的BigDecimal类精度问题
bigdecimal 能保证精度的原理是:BigDecimal的解决方案就是,不使用二进制,而是使用十进制(BigInteger)+小数点位置(scale)来表示小数,就是把所有的小数变成整数,记录小 ...
随机推荐
- Linux配置2个Tomcat同时运行
先说一下怎么遇到的这个问题,在练习linux中部署web项目时,linux系统安装了两个tomcat. 操作步骤: 1.配置profile#vi /etc/profile 输入以下内容: 这是两个to ...
- 合并代码操作 | git fetch 与 git pull
前言 首先我们要说简单说git的运行机制.git分为本地仓库和远程仓库,我们一般情况都是写完代码,commit到本地仓库(生成本地仓的commit ID,代表当前提交代码的版本号),然后push到远程 ...
- 面向政务企业的开发者工具集-逐浪文本大师v0.1正式发布(含代码全部开源啦!)
这是一款基于.net 4.7环境开发的开发者工具. 一个实用的windows小工具集合,里面包含了多个常用的小软件.其中的批量修改文件名及文件内容功能,可以自定义修改规则,支持规则的导入与导出.不需要 ...
- 小程序嵌套H5的方式和技巧(一)
文章内多次使用了关键字"壳",首先先解释一下什么是壳 壳: 小程序由原生的web-view组件形成的页面,页面只包含技术逻辑(如打开H5页面),不包含具体业务接口请求和业务逻辑处理 ...
- 从零开始学Kotlin第七课
1.强制类型转换需要在后面加两个感叹号 2.如果需要在java代码调用kotlin的方法时候使用文件名+kt.方法 3.object 类名 是创建匿名内部类的写法 调用 传入class对象 4.在to ...
- JavaSE复习巩固
第二天:复习if语句,扫描器,switch语句,循环语句 1.if语句---流程控制语句 if之前学的语句是顺序结构 1.1 单个if的语法结构 if(条件判断){ 满足条件需要做的事情: } int ...
- Java跟JavaScript两者间的关系和区别
想必很多人在刚接触和认识Java的时候,都好奇它与JavaScript之间的关系,长得这么像,难道是出自同门的升级版?嗯,他们的发明者确实颇具渊源,而且客观来说,JS确实相较Java更加简洁大众,但它 ...
- 【POJ1961 Period】【KMP】
题面 一个字符串的前缀是从第一个字符开始的连续若干个字符,例如"abaab"共有5个前缀,分别是a, ab, aba, abaa, abaab. 我们希望知道一个N位字符串S的前缀 ...
- Codeforces 1326F2 - Wise Men (Hard Version)(FWT+整数划分)
Codeforces 题目传送门 & 洛谷题目传送门 qwq 这题大约是二十来天前 AC 的罢,为何拖到此时才完成这篇题解,由此可见我是个名副其实的大鸽子( 这是我上 M 的那场我没切掉的 F ...
- Codeforces 1158F - Density of subarrays(dp,神仙题)
Codeforces 题目传送门 & 洛谷题目传送门 人生中第一道 *3500(显然不是自己独立 AC 的),不过还是祭一下罢 神仙 D1F 首先考虑对于给定的序列 \(a_1,a_2,\do ...