Java中测试对象的等价性
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中测试对象的等价性的更多相关文章
- JAVA中JavaBean对象之间属性拷贝的方法
JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,对于这种情况,可以采用以下几个简便方法处理. 下面对这 ...
- java中直接打印对象
java中直接打印对象,会调用对象.toString()方法.如果没有重写toString()方法会输出"类名+@+hasCode"值,hasCode是一个十六进制数 //没有重写 ...
- Java中的对象池技术
java中的对象池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复重复创建相等变量时节省了很多时间.对象池其实也就是一个内存 ...
- Java中计算对象的大小
一.计算对象大小的方法 Java中如何计算对象的大小呢,找到了4种方法: 1.java.lang.instrument.Instrumentation的getObjectSize方法: 2.BTrac ...
- 如何在Java中测试类是否是线程安全的
通过优锐课的java核心笔记中,我们可以看到关于如何在java中测试类是否线程安全的一些知识点汇总,分享给大家学习参考. 线程安全性测试与典型的单线程测试不同.为了测试一个方法是否是线程安全的,我们需 ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 【译】Java中的对象序列化
前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...
- 如何使用java中的对象
使用java中的对象,分2步: 1.创建一个对象: 2.使用对象的属性和方法. 见下面的示例代码: package com.imooc; //1.定义一个类 public class Telphone ...
- Java中String对象的不可变性
首先看一个程序 package reverse; public class Reverse { public static void main(String[] args) { String c1=n ...
随机推荐
- androidSDK也要配置环境变量(转)
android的开发人员来说,首先要做的就是环境变量的配置.java是需要配置环境变量的.当然,安卓的环境变量需要我们配置adb的使用,将开发平台的两个工具包配置到环境变量里. 工具/原料 andro ...
- 对Android项目中的文件夹进行解释
对Android项目中的文件夹进行解释: · src:里面存放的是Activity程序,或者是以后的其他组件,在此文件夹之中建立类的时候一定要注意,包名称不能是一级. · gen:此文件夹中的内容是自 ...
- Apache服务器的下载与安装
关于PHP的运行环境搭载,网上文章繁杂,遂自己整理一篇! PHP的运行必然少不了服务器的支持,何为服务器?通俗讲就是在一台计算机上,安装个服务器软件,这台计算机便可以称之为服务器,服务器软件和计算机本 ...
- 在CentOS 6上搭建私有的Docker Registry
在CentOS 6上搭建私有的Docker Registry v2Registry概念 :Registry是一个无状态的, 高可扩展的服务器端应用程序, 用于存储和分发Docker Image. 依赖 ...
- achartengine 绘图表神器
http://code.google.com/p/achartengine/
- 国家与城市的sql
--省表 create table tb_province ( pID int NOT NULL PRIMARY KEY, pName ) ) --省 ,'北京市') ,'天津市') ,'上海市') ...
- 递推DP POJ 1163 The Triangle
题目传送门 题意:找一条从顶部到底部的一条路径,往左下或右下走,使得经过的数字和最大. 分析:递推的经典题目,自底向上递推.当状态保存在a[n][j]时可省去dp数组,空间可优化. 代码1: /*** ...
- POJ1204 Word Puzzles(AC自动机)
给一个L*C字符矩阵和W个字符串,问那些字符串出现在矩阵的位置,横竖斜八个向. 就是个多模式匹配的问题,直接AC自动机搞了,枚举字符矩阵八个方向的所有字符串构成主串,然后在W个模式串构造的AC自动机上 ...
- LightOJ1057 Collecting Gold(状压DP)
这道题可以想到几点: 整个行程可以看作一次次的行走,每次行走都是用最短的路程从某一非空点到达另外一非空点: 两点间最少的步数是二者x和y坐标差的最大值: 返回原点这个过程,肯定是取完最后一个黄金后直接 ...
- 【BZOJ】1507: [NOI2003]Editor(Splay)
http://www.lydsy.com/JudgeOnline/problem.php?id=1507 当练splay模板了,发现wjmzbmr的splay写得异常简介,学习了.orzzzzzzzz ...