Java中相等测试
一:equals与==的区别
(1)基本数据类型
byte,short,char,int,long,float,double,boolean
此类数据类型的比较需要使用==,此时比较的是他们的值,若相等,则返回true,若不同,则返回false;
注:
Integer a =1000;
Integer b=1000;
if (a==b)....
此时返回为false,因为Integer表示的不是基本数据类型,而是基本类型Int所对应的类,所以此时==比较的是对象是否指向同一个存储区域。
(2) 类
Object类中的equals方法检测的是一个对象是否等于另一个对象,或者判断两个对象是否引用了同一个对象;
当对两个对象使用==进行比较时,比较的是他们在内存中的存放地址,所以只有同一个new出来的对象的两个对象变量比较时,才会返回true,否则比较的结果即为false。
public class EqualsTest
{
public static void main(String[] args)
{
Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee alice2 = alice1;
Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1); System.out.println("alice1 == alice2: " + (alice1 == alice2)); System.out.println("alice1 == alice3: " + (alice1 == alice3)); System.out.println("alice1.equals(alice3): " + alice1.equals(alice3)); System.out.println("alice1.equals(bob): " + alice1.equals(bob));
}
//代码来自CoreJava
编译结果是:
alice1 == alice2: true//alice1和alice2是同一个new出来的两个对象,所以返回true
alice1 == alice3: false//虽然alice1和alice3的对象中的参数相同,但内存中的存放地址不同,所以使用==判断结果为false
alice1.equals(alice3): true
alice1.equals(bob): false
Manager carl = new Manager("Carl Cracker", 80000, 1987, 12, 15);
Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);
boss.setBonus(5000);
System.out.println("carl.equals(boss): " + carl.equals(boss));
编译结果:
carl.equals(boss): false
其中Manager是Employee的子类,因此Manager对象比较,首先调用超类的equals方法,如果检测失败,对象就不可能相等,在此代码中,carl和boss在超类中的域都相等,因此需要比较子类中的实例域,由于boss.setBonus(5000);的存在,因此实例域不同,所以输出false。
附:CoreJava中推荐的完美equals方法建议:
1.显式参数命名的otherObject,需要将它转换成另一个叫做other的变量。
2.检测this与otherObject是否引用同一个对象。
if(this==otherObject)return ture
3.检测otherObject是否为空,如果为空,则返回false。这个很有必要。
4.比较this与otherObject是否属于同一个类,如果equals的语义在每个子类中有所改变,就使用getClass进行检测。
if(getClass!=otherObject。getClass())return false。如果所有的子类都拥有统一的语义,就使用instanceof检测。
5.将otherObject转换为相应的类类型变量。
6.使用==比较基本类型域,使用quals比较对象域。如果所有的域都匹配,就返回true,否则返回false。如果在子类中重新定义了equals,就要在其中包含调用super.equals(other)。
Java中相等测试的更多相关文章
- 使用 Visual Studio Team Test 进行单元测试和java中的测试
C#中test测试地 方法一. 1.从NUnit官网(http://www.nunit.org/index.php)下载最新版本NUnit,当前版本为NUnit2.5.8. 2.安装后,在VS2008 ...
- java中如何测试一段代码的运行时间
一.以毫秒为单位.long startTime = System.currentTimeMillis(); //获取开始时间 doSomething(); //测试的代码段 long endTime ...
- Java中简单测试FastDFS的文件上传
pom.xml文件内容如下: <dependencies> <!-- fastdfs --> <dependency> <groupId>org.cso ...
- Java中测试对象的等价性
Java中用于测试对象的等价性有三个操作符:== , != 和 Equals() 对于基本类型即int,boolean, byte 等等来说,==和 != 比较的是 基本类型的内容,这和c.c++是一 ...
- 关于java中的编码问题
ok,今天搞了一天都在探索java字符的编码问题.十分头疼.最后终于得出几点: 1.网上有很多博客说判断一个String的编码的方法是通过如下代码;但其实这个代码完全是错的,用一种编码decode后, ...
- JAVA中的CountDownLatch、CyclicBarrier、Semaphore的简单测试
因公司需要做一个对于CountDownLatch的分享,特写了此blog. 具体细节可以参见:小结java自带的跟锁相关的一些类 在做这个分享的过程中发现了Main和junit的运行的区别,在另外一个 ...
- java中如何使用Junit测试
java中如何使用Junit测试 一.总结 一句话总结:a.单元测试的测试代码在test文件夹下,和源码不在同一个文件夹下 b.测试的类方法都以test开头,后面接要测试的类或者方法的名字 1.JUn ...
- Java 中静态代码块初始化问题测试
Java 中静态代码块初始化问题测试 原创 情况一:变量是 static final 修饰的"编译期常量",如 public static final String a = &qu ...
- 关于Java中的HashMap的深浅拷贝的测试与几点思考
0.前言 工作忙起来后,许久不看算法,竟然DFA敏感词算法都要看好一阵才能理解...真是和三阶魔方还原手法一样,田园将芜,非常可惜啊. 在DFA算法中,第一步是需要理解它的数据结构,在此基础上,涉及到 ...
随机推荐
- Windows 技术预览版 - 传言中的Win 10
http://windows.microsoft.com/zh-cn/windows/preview-iso Windows Technical Preview 产品密钥: NKJFK-GPHP7-G ...
- julia与python中的列表解析.jl
julia与python中的列表解析.jl #=julia与python中的列表解析.jl 2016年3月16日 07:30:47 codegay julia是一门很年轻的科学计算语言 julia文档 ...
- Eclipse中一些快捷键
用到哪里更新到哪里~~~ 1,代码自动对齐 ctrl+shift+f 2,自动填充相关的包 alt+/ 注意选择好需要的包 3,注释某几行代码 选定后ctrl+/ 4,设置自动补全 最简单的修改方 ...
- (转)Ratchet教程:Buttons组件
原文:http://www.w3cplus.com/mobile/create-buttons-with-ratchet.html Ratchet教程:Buttons组件 ...
- (转)深入浅出 iOS 之生命周期
原文:http://www.cocoachina.com/applenews/devnews/2011/0817/3129.html 深入浅出 iOS 之生命周期 发布于:2011-08-17 10: ...
- R.java不能自动更新
1. The type R is already defined. (很多时候我们在导入其他人的程序的时候,会遇到这个错误) 通常在project里有两个R.java,一个在src,一个在gen,通常 ...
- 设置vs2008代码区的背景色
编写程序.调试代码时,是不是感觉文字的白色背景有些刺眼呢?vs2008 给我们提供了改变背景色的功能. 依次展开:工具->选项->环境->字体和颜色,在“显示项--纯文本--项背景色 ...
- BZOJ 3251 树上三角形
NOIP的东西回成都再说吧... 这题暴力. #include<iostream> #include<cstdio> #include<cstring> #incl ...
- 【Tsinghua OJ】祖玛(Zuma)问题
描述 祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色.此后,你可以发射珠子到轨 道上并加入原有序列中.一旦有三个或更多同色的珠子变成相 ...
- HDU 1622
http://acm.hdu.edu.cn/showproblem.php?pid=1622 白书上6.3.2二叉树层次遍历的例题,层次遍历用bfs,建立二叉树,很基础的题目 #include < ...