博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中的包装类
阅读量:6799 次
发布时间:2019-06-26

本文共 1677 字,大约阅读时间需要 5 分钟。

    java中有8种基本的数据类型,其中每一种数据类型都对应了一种包装类。java是纯面向对象的语言,在java中的一切东西都可以用对象的形式表示,包括java中的基本数据类型。包装类中除了Integer和Character外,其他的包装类都是以java中的基本数据类型的首字母大写命名的。

    每个包装类中都有一个静态的方法来将java的基本数据类型转换为包装类,这个静态方法接受一个对应的基本类型参数然后返回一个包装类的引用:

int i = 10;Integer i1 = Integer.valueOf(i);

还有一个实例方法xxxValue()返回该包装类对应的基本数据类型:

Integer i1 = new Integer(1);int i2 = i1.intValue();

其中把基本的数据类型转换成包装类型我们习惯将其称之为装箱,把包装类型转换为基本类型我们称之为拆箱。在java5之后java引入了自动装箱和拆箱,我们在代码中可以直接把基本数据赋值給包装类由java编译器来帮我们调用对应的valueOf方法和xxxValue方法。

    在包装类中除了toString方法还有几个常用的和String有关的方法。除了Character外,每个包装类中都有一个静态的ValueOf(String s)方法接受一个字符串返回一个包装类。

Integer i2 = Integer.valueOf("1");

还有一个静态的parseXXX(String)方法根据字符串返回基本的数据类型,如:

int i = Integer.parseInt("1");

还有一个静态的toString方法根据基本的数据类型返回一个字符串:

String s = Integer.toString(1)

    在java中每一个类都有一个共同的父类Object。在Object类中有两个方法分别是:euqals和hashCode方法。首先我们先来介绍一下equals方法:equals方法是用来判断当前对象和传入的参数对象是否相等。其中两个比较的是对象的内存地址也就是说当两个引用指向同一个对象时这个方法才会返回true。这个equals的默认实现显然不符和我们的需求,所以我们需要在我们自己创建的对象中重写这个方法。在java的包装类中就默认重写了这个方法,例如:

public boolean equals(Object obj) {        if (obj instanceof Integer) {            return value == ((Integer)obj).intValue();        }        return false;}

这里需要注意的是最好不要用equals方法来判断两个Float或者两个Double是否相等,因为在java中比较浮点类型是将其转换成二进制比较只有两个浮点数的二进制完全相同才会返回true。我们知道在计算机中小数的计算是不精确的所以有时会出现虽然数学运算的结果相同但是计算机的运行结果却不相同导致方法返回结果和我们预期的不同。

    介绍完equals方法我们在来介绍一下hashCode方法。hashCode返回对象的一个hash值,其中一个对象的hashCode值是不能改变的,不同的对象hashCode值可以相等但是最好不等。这里我们需要知道,对于两个对象如果,如果equals方法返回true那么hashCode值就必须一样,相反如果两个对象的hashCode相等,那么equals方法可以返回true也可以返回false。hashCode的默认实现一般是将对象的内存地址转换为整数。由于equals方法和hashcode方法的关系,当我们重写equals方法时也必须重写hashCode方法。关于equals方法和hashCode方法我会在java容器中在详细的介绍。

转载于:https://www.cnblogs.com/suyang-java/p/10587324.html

你可能感兴趣的文章
jdk及tomcat的配置
查看>>
Android介绍以及源码编译--编译Android源码
查看>>
[C# 网络编程系列]专题十二:实现一个简单的FTP服务器
查看>>
软工个人作业4
查看>>
DOM节点树和元素树--深度遍历
查看>>
Nginx 安装及配置
查看>>
我为什么要学习重构!
查看>>
CentOS 7最小安装后,手动连接网络
查看>>
选择排序
查看>>
卷积神经网络(基础知识回顾)-第七讲
查看>>
inno setup中文支持
查看>>
js内存泄漏的问题?
查看>>
程序代码阅读与分析
查看>>
Linux 安装PHP PECL 百分百成功
查看>>
关于c++风格 code style
查看>>
svn 常用
查看>>
SVM支持向量机
查看>>
Asymptote 学习记录(2):例子阅读
查看>>
《常微分方程教程》习题2-2,4:一个跟踪问题
查看>>
陶哲轩实分析例17.2.3
查看>>