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. [官网]Red Hat Enterprise Linux Release Dates

    Red Hat Enterprise Linux Release Dates https://access.redhat.com/articles/3078 The tables below list ...

  2. day 7-3 僵尸进程,孤儿进程与守护进程

    一.基本定义 正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 当一个 进程完成它的工作终止之后,它 ...

  3. php7函数,声明,返回值等新特性介绍

    使用 ... 运算符定义变长参数函数 (PHP 5 >= 5.6.0, PHP 7) 现在可以不依赖 func_get_args(), 使用 ... 运算符 来实现 变长参数函数. functi ...

  4. Running ASP.NET Core applications on Windows Subsystem for Linux

    Setting up Linux on Windows 10 First thing is to enable Windows Subsystem for Linux. It doesn’t inst ...

  5. hdu-2072(字典树)

    字典树模板题 代码 #include<iostream> #include<algorithm> #include<cstdio> #include<cstr ...

  6. python变量与基础数据类型

    一.什么是变量 变量是什么?  变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用.在python中一切都是变量. 1.python变量命名的要求 1,必须有数字,字母,下划线任意组合. ...

  7. Tomcat服务的安装与配置

    介绍 百度百科 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开 ...

  8. 洛谷P2084 进制转换

    题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^4+0*2^3+1*2^2+0*2^1+1*2^0, 那么请你编程实现,将一个M进制的 ...

  9. springboot 简单搭建

    springboot的入门请参考:https://blog.csdn.net/hanjun0612/article/details/81538449 这里就简单看下搭建: 一,看一下项目结构: 创建一 ...

  10. Android 取消标题栏

    有很多种方法. 但一般多个页面的话,大多会在AndroidManifest.xml文件中设置 那么这里你需要注意了. 第一种: 如果style.xml 的 parent   是 <style n ...