Java 判断相等
1.除 float 和 double 外的原始数据类型 : 使用 ==
long a = (long) 1234567890;
long b = (long) 1234567890;
if (a == b) {
System.out.println("基本数据类型相等");
}
2.包装类使用 equals 或者转换为基本数据类型再用 ==
Long a = (long) 1234567890;
Long b = (long) 1234567890;
if (a != null && a.equals(b)) {
System.out.println("包装类相等");
}
if (a != null && a.longValue() == b.longValue()) {
System.out.println("包装类相等");
}
3.对象要用 equals
String a1 = null;
String b1 = new String();
if (a1 != null && a1.length() > 0 && a1.equals(b1)) {
System.out.println("对象相等");
}
附录:
public static void main(String[] args) {
System.out.println("-----");
int a = 200;
int a2 = 200;
if (a == a2) {
System.out.println("相等");//√
}
System.out.println("-----");
Integer b = 200;
Integer b2 = 200;
if (b == b2) {
System.out.println("相等");//-128~127√
}
if (b.equals(b2)) {
System.out.println("相等2");//√
}
System.out.println("-----");
Integer c = new Integer(200);
Integer c2 = new Integer(200);
if (c == c2) {
System.out.println("相等");
}
if (c.equals(c2)) {
System.out.println("相等2");//√
}
System.out.println("-----");
if (a==c){
System.out.println("相等");//√
}
if (c.equals(a)){
System.out.println("相等2");//√
}
if (b==c){
System.out.println("相等3");
}
if (c.equals(b)){
System.out.println("相等4");//√
}
}
public static void main(String[] args) {
System.out.println("-----");
String a = "a";
String a2 = "a";
if (a == a2) {
System.out.println("相等");//√
}
if (a.equals(a2)) {
System.out.println("相等2");//√
}
System.out.println("-----");
String b = new String("a");
String b2 = new String("a");
if (b == b2) {
System.out.println("相等");
}
if (b.equals(b2)) {
System.out.println("相等2");//√
}
System.out.println("-----");
if (a == b) {
System.out.println("相等");
}
if (a.equals(b)) {
System.out.println("相等2");//√
}
}
public static void main(String[] args) {
System.out.println("-----");
boolean a = true;
boolean a2 = true;
if (a == a2) {
System.out.println("相等");//√
}
System.out.println("-----");
Boolean b = true;
Boolean b2 = true;
if (b == b2) {
System.out.println("相等");//√
}
if (b.equals(b2)) {
System.out.println("相等2");//√
}
System.out.println("-----");
Boolean c = new Boolean(true);
Boolean c2 = new Boolean(true);
if (c == c2) {
System.out.println("相等");
}
if (c.equals(c2)) {
System.out.println("相等2");//√
}
System.out.println("-----");
if (a == c) {
System.out.println("相等");//√
}
if (c.equals(a)) {
System.out.println("相等2");//√
}
if (b == c) {
System.out.println("相等3");
}
if (c.equals(b)) {
System.out.println("相等4");//√
}
}
超类 Object 中有这个 equals() 方法,该方法主要用于比较两个对象是否相等。该方法的源码如下:
public boolean equals(Object obj) {
return (this == obj);
}
我们知道所有的对象都拥有标识(内存地址)和状态(数据),同时“==”比较两个对象的的内存地址,所以说使用 Object 的 equals() 方法是比较两个对象的内存地址是否相等,即若 object1.equals(object2) 为 true,则表示 equals1 和 equals2 实际上是引用同一个对象。虽然有时候 Object 的 equals() 方法可以满足我们一些基本的要求,但是我们必须要清楚我们很大部分时间都是进行两个对象的比较,这个时候 Object 的 equals() 方法就不可以了,实际上 JDK 中,String、Math 等封装类都对 equals() 方法进行了重写。
在 Java 规范中,它对 equals() 方法的使用必须要遵循如下几个规则:
equals 方法在非空对象引用上实现相等关系:
1、自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
2、对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
3、传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
5、对于任何非空引用值 x,x.equals(null) 都应返回 false。
对于上面几个规则,我们在使用的过程中最好遵守,否则会出现意想不到的错误。
在 java 中进行比较,我们需要根据比较的类型来选择合适的比较方式:
1) 对象域,使用 equals 方法 。
2) 类型安全的枚举,使用 equals 或== 。
3) 可能为 null 的对象域 : 使用 == 和 equals 。
4) 数组域 : 使用 Arrays.equals 。
5)除 float 和 double 外的原始数据类型 : 使用 == 。
6) float 类型: 使用 Float.foatToIntBits 转换成 int 类型,然后使用==。
7) double 类型: 使用 Double.doubleToLongBit 转换成 long 类型,然后使用==。
Java 判断相等的更多相关文章
- 使用Java判断字符串中的中文字符数量
Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. char[] c = str.toCharArray(); for ...
- Java判断回文数算法简单实现
好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...
- Java 判断操作系统类型(适用于各种操作系统)
Java 判断操作系统类型(适用于各种操作系统) 最近一段时间写一个授权的程序,需要获取很多信息来保证程序不能随意复制使用,必须经过授权才可以. 为了限制用户使用的操作系统,必须有统一的方法来获取才可 ...
- java判断字符串是否为空的方法总结
http://blog.csdn.net/qq799499343/article/details/8492672 以下是java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...
- Java判断字符串是中文还是英文
在做开发的时候我们经常需要用到根据某个字符或者字符串来判断其是中文还是英文,从而做相应的处理,其实不难,大多数人们都是用到正则来判断的,下面小贝就给大家分享一下Java判断字符串是中文还是英文 推荐文 ...
- (转)java判断string变量是否是数字的六种方法小结
java判断string变量是否是数字的六种方法小结 (2012-10-17 17:00:17) 转载▼ 标签: it 分类: 转发 1.用JAVA自带的函数 public static boolea ...
- JAVA判断32位还是64位,调用不同的DLL(转)
源:JAVA判断32位还是64位,调用不同的DLL 通过获取sun.arch.data.model可判断是32还是64的JAVA 将32或者64位的DLL放不同的目录,实现自适应调用DLL Prope ...
- java判断是否为汉字
java判断是否为汉字 public static boolean isChinese(String str) { String regEx = "[\u4e00-\u9fa5]&quo ...
- java判断字符串是否回文
java判断字符串是否回文 /** * java判断字符串是否回文<br><br> * 基本思想是利用字符串首尾对应位置相比较 * * @author InJavaWeTrus ...
- java 判断用户是PC端和还是APP端登陆
java 判断用户是PC端和还是APP端登陆 public void getRequestHeader(HttpServletRequest request){ // 从浏览器获取请求头信息 Stri ...
随机推荐
- Docker 给 故障停掉的 container 增加 restart 参数
操作过程见图: 执行的命令比较简单: docker container update --restart=always containername 即可.
- golang操作mysql使用总结
前言 Golang 提供了database/sql包用于对SQL数据库的访问, 作为操作数据库的入口对象sql.DB, 主要为我们提供了两个重要的功能: sql.DB 通过数据库驱动为我们提供管理底层 ...
- 临时的ThisCall
// 获取当前定位 changeCity: function () { let that = this; that.locationClose(); Upj._changeCity().then((d ...
- linux pstree命令
pstree命令可以使进程以tree的形式显示 pstree -ssystemd─┬─UVPHostd───6*[{UVPHostd}] ├─acpid ├─2*[agetty] ├─crond ├─ ...
- shit iview docs & i-radio bug
shit iview docs & i-radio bug https://github.com/iview/iview/issues/5627 <i-row> <i-col ...
- Vue命令行工具vue-cli
前面的话 Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用.该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程.只需几分钟即可创建并启动一个带热重载.保存时静态检查以及可用于生 ...
- 两种从spring容器获取bean方式
- Nginx Tcp四层反向代理
L:117 //nginx反向代理代码 server{ listen ; proxy_pass localhost:; //指向上游服务器 proxy_protocol on; //启用对上游传递协议 ...
- henrylee2cn简单的rpc服务
server 端package controllers import ( "github.com/henrylee2cn/teleport" "model/system& ...
- 洛谷 P1441 砝码称重
题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 输入输出格式 输入格式: 输入文件weight.in的第1行为有两个整数n ...