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. Linux下向windows传输文件【sz 文件】没有弹框提示下载到什么位置

    Linux环境向windows环境传输文件 security crt工具,同同一个软件,连接不同服务器,有的服务器传送文件没有弹框选择要下载的文件路径,可以在[Options]-[Session Op ...

  2. MySQL高级篇 | MySQL逻辑架构

    思维导图 架构逻辑视图 每个虚线框为一层,总共三层. 第一层:连接层,所包含的服务并不是MySQL所独有的技术.它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等. 第二 ...

  3. Spring 之 BeanFactory 源码 - 接口分析

    一.BeanFactory的基本类体系结构(接口为主):

  4. go微服务框架Kratos笔记(七)使用jwt认证中间件

    引言 Json web token (JWT) 是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,特别适用于分布式站点的单点登录(SSO)场景.JWT的声明一般被用来在身份提供者和 ...

  5. 菜鸡的Java笔记 第十二 - java 构造方法与匿名对象

    1.点    构造方法的作用以及定义要求    匿名对象的使用    构造方法:        只要出现()的都表示方法        构造方法就是类构造对象时调用的方法,主要用来实例化对象.> ...

  6. linux python2.6.6升级到python2.7

    升级 python 2.6.6 系统到 2.7.10 版本 CentOS 6 系统默认 Python 版本是:2.6.6 平时在使用中遇到很多的库要求是 2.7.x 版本的库,比如使用 ConfigP ...

  7. Java设计模式之(四)——原型模式

    1.什么是原型模式 Specify the kinds of objects to create using a prototypical instance,and create new object ...

  8. [hdu7034]Array

    令$f(a)_{i}=\min_{i<j\le n,a_{i}=a_{j}}j$​​(特别的,若不存在$j$​​则令$f(a)_{i}=n+1$​​),则有以下性质: 1.对于$b_{i}$​​ ...

  9. processon刷文件的骚操作

    https://github.com/ilikly/ProcessOnRegister用法自己看说明哈,群友亲测可用,而且也给别人用了...缺点是每轮都需要手动操作一下,并且需要俩微信号

  10. CF1288

    A 考虑\(x + 1 = \sqrt{d}\)时在有理域上有最优界. 那我在整数域上附近取三个点取min就行了. // code by fhq_treap #include<bits/stdc ...