Java中用于测试对象的等价性有三个操作符:== , != 和 Equals()

对于基本类型即int,boolean, byte 等等来说,==和 != 比较的是 基本类型的内容,这和c、c++是一样的;

public class Ex5 {
public static void main(String[] args) {
int i = 34;
int ii = 34;
System.out.println(i==ii);
}
} //output: true

对于其他类型来说, == 和 != 比较的是对象的引用,显然是不等的,如果要比较对象之间的内容,对象所属的类型必须实现Equals()方法(大多数Java类库中都实现了Equals方法),如果没有实现Equals方法,会自动调用object中的Equals方法,而该方法是用来比较“地址”的,因此结果会是false。

public class Ex5 {
public static void main(String[] args) { Integer i1 = new Integer(34);
Integer i2 = new Integer(34);
System.out.println(i1==i2); System.out.println(i1.equals(i2));
}
}
//output:
//false
//true 

后来发现一个奇怪的问题,比如如下这段代码,输出的却是true。

public class Ex5 {
public static void main(String[] args) {
Integer i1 = 34;
Integer i2 = 34;
System.out.println(i1==i2);
}
}
//output:
//true

Integer i = 34这种赋值方式会调用Integer的ValueOf()缓存(如果不在-128~127之间则不会缓存)为基本类型(jvm会为Integer预先分配一部分内存,在以后有请求Integer对象时,若值位于-128~127时,系统都会让它指向这个预分配好的Integer对象)

public class Ex5 {
public static void main(String[] args) {
Integer i1 = 34;
Integer i2 = 34;
Integer i3 = Integer.ValueOf(34);
System.out.println(i1==i2);
System.out.println(i1==i3);
}
}
//output:
//true
//true

Integer与int比较相等时,会将Integer转换为进行转换为int再比较,所以最终比较的是内容。  

Java中测试对象的等价性的更多相关文章

  1. JAVA中JavaBean对象之间属性拷贝的方法

    JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,对于这种情况,可以采用以下几个简便方法处理. 下面对这 ...

  2. java中直接打印对象

    java中直接打印对象,会调用对象.toString()方法.如果没有重写toString()方法会输出"类名+@+hasCode"值,hasCode是一个十六进制数 //没有重写 ...

  3. Java中的对象池技术

    java中的对象池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复重复创建相等变量时节省了很多时间.对象池其实也就是一个内存 ...

  4. Java中计算对象的大小

    一.计算对象大小的方法 Java中如何计算对象的大小呢,找到了4种方法: 1.java.lang.instrument.Instrumentation的getObjectSize方法: 2.BTrac ...

  5. 如何在Java中测试类是否是线程安全的

    通过优锐课的java核心笔记中,我们可以看到关于如何在java中测试类是否线程安全的一些知识点汇总,分享给大家学习参考. 线程安全性测试与典型的单线程测试不同.为了测试一个方法是否是线程安全的,我们需 ...

  6. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  7. 【译】Java中的对象序列化

    前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...

  8. 如何使用java中的对象

    使用java中的对象,分2步: 1.创建一个对象: 2.使用对象的属性和方法. 见下面的示例代码: package com.imooc; //1.定义一个类 public class Telphone ...

  9. Java中String对象的不可变性

    首先看一个程序 package reverse; public class Reverse { public static void main(String[] args) { String c1=n ...

随机推荐

  1. 网页制作技巧:iframe自适应高度

    转自:http://www.enet.com.cn/article/2012/0620/A20120620126237.shtml 通过Google搜索iframe 自适应高度,结果5W多条,搜索if ...

  2. HDU 4374 One hundred layer DP的单调队列优化

    One hundred layer Problem Description   Now there is a game called the new man down 100th floor. The ...

  3. ASP.NET获取客户端IP/用户名等信息

    1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostN ...

  4. .NET中异常处理的最佳实践(转)

    原文出处: CodeProject   译文出处:周见智的博客   欢迎分享原创到伯乐头条 介绍 “我的软件程序从来都不会出错”.你们相信吗?我几乎可以肯定所有人都会大喊我是个骗子.“软件程序几乎不可 ...

  5. 餐厅到店点餐系统app燃尽图

    队友: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...

  6. BZOJ4182 : Shopping

    最后选择的一定是树上的一个连通块,考虑树分治,每次只需考虑重心必选的情况,这就变成了以重心为根的树形依赖多重背包问题. 设f[x][j]表示从根节点到x这条路径及其左边的所有节点,以及以x为根的子树的 ...

  7. NOIP201103瑞士轮

    试题描述 [背景]在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较低,但比赛过程 ...

  8. 原创Java版的Shell

    如果你接触过windows操作系统,你应该对windows中的cmd有一定的了解. 如果你接触过Linux操作系统,你应该对Linux的shell有一定的了解. 本文说的正是linux中的shell. ...

  9. Sqlserver 存储过程中结合事务的代码

    Sqlserver 存储过程中结合事务的代码  --方式一 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ ...

  10. Eclipse远程调试(远程服务器端监听)

    前提:远程服务器上运行的WEB项目class对应的源码与本地项目中必须保持一致,也就是远程tomcat部署的项目就是本机项目打包过去的,而本机项目没有发生变动. 远程服务器端 服务器端配置eclips ...