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中特殊的类——包装类的更多相关文章

  1. java中基于TaskEngine类封装实现定时任务

    主要包括如下几个类: 文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 ...

  2. Java中基本数据类型和包装类

    参考:深入剖析Java中的装箱和拆箱; Java中基本数据类型和包装类互转中 缓冲机制的使用; java学习笔记:装箱和拆箱,包装器和缓冲池 Java 各 类型数据在内存中分配情况详解 一 java内 ...

  3. 带有静态方法的类(java中的math类)

    带有静态方法的类通常(虽然不一定是这样)不打算被初始化. 可以用私有构造函数来限制非抽象类被初始化. 例如,java中的math类.它让构造函数标记为私有,所以你无法创建Math的实例.但Math类却 ...

  4. java中的File类

    File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...

  5. Java基础(43):Java中的Object类与其方法(转)

    Object类 java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. O ...

  6. Java中的Unsafe类111

    1.Unsafe类介绍 Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty.Hadoo ...

  7. Java中遍历实体类(处理MongoDB)

    在实际过程中,经常要将实体类进行封装,尤其是处理数据库的过程中:因此,对于遍历实体类能够与数据库中的一行数据对应起来. 我是使用的环境是Spring boot,访问的数据库时MongoDB 实体类遍历 ...

  8. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...

  9. Java中的BigDecimal类精度问题

    bigdecimal 能保证精度的原理是:BigDecimal的解决方案就是,不使用二进制,而是使用十进制(BigInteger)+小数点位置(scale)来表示小数,就是把所有的小数变成整数,记录小 ...

随机推荐

  1. 安装、卸载 node.js出错 Could not access network location *:\node.js\ 出错

    上周五,WIN10自动更新系统,导致我的node.js 和 Gradle 还有解压的winRAR都不能用!!!可恶 自动更新!!可恶啊!!! 然后我想把node.js重新卸载了再安装,结果 很慌很慌, ...

  2. prometheus(6)之常用服务监控

    监控常用服务 1.tomcat 2.redis 3.mysql 4.nginx 5.mongodb prometheus监控tomcat tomcat_exporter地址 https://githu ...

  3. 深入剖析 RocketMQ 源码 - 消息存储模块

    一.简介 RocketMQ 是阿里巴巴开源的分布式消息中间件,它借鉴了 Kafka 实现,支持消息订阅与发布.顺序消息.事务消息.定时消息.消息回溯.死信队列等功能.RocketMQ 架构上主要分为四 ...

  4. Python推导式详解,带你写出比较精简酷炫的代码

    Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...

  5. Spring Data Redis Stream的使用

    一.背景 Stream类型是 redis5之后新增的类型,在这篇文章中,我们实现使用Spring boot data redis来消费Redis Stream中的数据.实现独立消费和消费组消费. 二. ...

  6. 南大《软件分析》课程笔记——Data Flow Analysis

    南大<软件分析>--Data Flow Analysis @(静态分析) 目录 数据流分析概述 数据流分析应用 Reaching Definitions Analysis(may anal ...

  7. thread pool

    thread pool import concurrent.futures import urllib.request URLS = ['http://www.foxnews.com/', 'http ...

  8. 我個人喜歡的一些Ubuntu的相關配置

    1.vim vim安裝: sudo apt-get install vim-gtk vim美化:刚安装的VIM,可能界面并不是十分友好,我们可以更改vim的配置文件,按照我们的需求去修改它.在命令行下 ...

  9. python有关于图像的深度和通道

    目录: (一)图像的深度和图像的通道  (1)图像的深度  (2)图像的通道 (二)自定义一张多通道的图片 (1)zeros 函数 (2)ones  函数 (三)自定义一张单通道的图片 (四)像素操作 ...

  10. pycharm的selenium设置

    如果运行文件,提示 no model named selenium 那就需要添加selenium的安装地址 如上图 在python>lib>site-packages 在pycharm的f ...