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 判断相等的更多相关文章

  1. 使用Java判断字符串中的中文字符数量

    Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. char[] c = str.toCharArray(); for ...

  2. Java判断回文数算法简单实现

    好久没写java的代码了, 今天闲来无事写段java的代码,算是为新的一年磨磨刀,开个头,算法是Java判断回文数算法简单实现,基本思想是利用字符串对应位置比较,如果所有可能位置都满足要求,则输入的是 ...

  3. Java 判断操作系统类型(适用于各种操作系统)

    Java 判断操作系统类型(适用于各种操作系统) 最近一段时间写一个授权的程序,需要获取很多信息来保证程序不能随意复制使用,必须经过授权才可以. 为了限制用户使用的操作系统,必须有统一的方法来获取才可 ...

  4. java判断字符串是否为空的方法总结

    http://blog.csdn.net/qq799499343/article/details/8492672 以下是java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...

  5. Java判断字符串是中文还是英文

    在做开发的时候我们经常需要用到根据某个字符或者字符串来判断其是中文还是英文,从而做相应的处理,其实不难,大多数人们都是用到正则来判断的,下面小贝就给大家分享一下Java判断字符串是中文还是英文 推荐文 ...

  6. (转)java判断string变量是否是数字的六种方法小结

    java判断string变量是否是数字的六种方法小结 (2012-10-17 17:00:17) 转载▼ 标签: it 分类: 转发 1.用JAVA自带的函数 public static boolea ...

  7. JAVA判断32位还是64位,调用不同的DLL(转)

    源:JAVA判断32位还是64位,调用不同的DLL 通过获取sun.arch.data.model可判断是32还是64的JAVA 将32或者64位的DLL放不同的目录,实现自适应调用DLL Prope ...

  8. java判断是否为汉字

    java判断是否为汉字   public static boolean isChinese(String str) { String regEx = "[\u4e00-\u9fa5]&quo ...

  9. java判断字符串是否回文

    java判断字符串是否回文 /** * java判断字符串是否回文<br><br> * 基本思想是利用字符串首尾对应位置相比较 * * @author InJavaWeTrus ...

  10. java 判断用户是PC端和还是APP端登陆

    java 判断用户是PC端和还是APP端登陆 public void getRequestHeader(HttpServletRequest request){ // 从浏览器获取请求头信息 Stri ...

随机推荐

  1. Select2 4.0.5 API

    详细属性参考官方API,https://github.com/select2/select2/releases/tag/4.0.5 注:4.0.5版本API与3.x版本有差异,有些属性已废弃,以下列出 ...

  2. 安装sqlprompt

    特别说明:注册机会报毒,安装前请先关闭杀毒软件!下载好附件之后解压,打开SQLPrompt_7.2.0.241.exe按照提示安装完成.安装完成后断网!打开数据库,会在菜单栏中看到SQL Prompt ...

  3. 简单易懂的softmax交叉熵损失函数求导

    参考: https://blog.csdn.net/qian99/article/details/78046329

  4. tensorflow实现基于LSTM的文本分类方法

    tensorflow实现基于LSTM的文本分类方法 作者:u010223750 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实 ...

  5. 莫烦scikit-learn学习自修第六天【特征值矩阵标准化】

    1.代码实战 #!/usr/bin/env python #!_*_coding:UTF-8 _*_ import numpy as np from sklearn import preprocess ...

  6. git和svn的區別

    https://blog.csdn.net/bmicnj/article/details/78413058

  7. FMC

    FMC (FPGA Mezzanine Card) 编辑 FMC:英文全称,FPGA Mezzanine Card.是一个应用范围.适应环境范围和市场领域范围都很广的通用模块.FMC连接器(FMC C ...

  8. OfficeToHtmlHelper

    public class Office2HtmlHelper { /// <summary> /// Word转成Html /// </summary> /// <par ...

  9. 训练赛-Eyad and Math

    题意:给你四个数,求出a^b是否小于c^d,是的话输出<,否则输出>; 思路:因为数据很大,所以我们需要降低数据的规模,比如用一个log10()函数,这就能解决了,注意,要用scanf输入 ...

  10. P2123 皇后游戏

    题目背景 还记得 NOIP 2012 提高组 Day1 的国王游戏吗?时光飞逝,光阴荏苒,两年 过去了.国王游戏早已过时,如今已被皇后游戏取代,请你来解决类似于国王游 戏的另一个问题. 题目描述 皇后 ...