美文网首页
使用equals和==进行比较的区别

使用equals和==进行比较的区别

作者: 快感的感知 | 来源:发表于2023-11-11 10:02 被阅读0次

==

对于不同的数据类型,使用==进行比较的意义不同:

  • 基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。用==,比较的是他们的值;

  • 引用数据类型:用(==)进行比较的时候,比较的是地址。

对于引用类型,除非是同一个new出来的对象,他们的比较的结果为true,否则为false。因为每new一次,都会重新开辟堆内存空间,哪怕他们的值一致,但是也是在不同的地址存放。所以对于引用类型的值比较应该使用equals方法。

equals()方法介绍

equals 方法是 Object 中定义的一个方法,源码如下:

可以看到实际上就是用的 == 实现的,所以这个原始方法意义不大,一般在类中做比较的时候,都会重写这个方法,如String、Integer、Date等。

public boolean equals(Object obj) {
if (obj instanceof Integer) {
       //比较Integer中包装的int值
return value == ((Integer)obj).intValue();
}
return false;
}
//String
public boolean equals(Object anObject) {
if (this == anObject) { //同一个对象
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = length();
if (n == anotherString.length()) {
int i = 0;
while (n-- != 0) {
if (charAt(i) != anotherString.charAt(i))  //逐个字符比较
return false;
i++;
}
return true;
}
}
return false;
}

String的比较

public class StringDemo {
   public static void main(String args[]) {
       String str1 = "Hello";
       String str2 = new String("Hello");
       String str3 = str2; // 引用传递
       System.out.println(str1 == str2); // false
       System.out.println(str1 == str3); // false
       System.out.println(str2 == str3); // true
       System.out.println(str1.equals(str2)); // true
       System.out.println(str1.equals(str3)); // true
       System.out.println(str2.equals(str3)); // true
  }
}

由此可见,equals 是比较字符串的内容是否一样,== 是比较字符串的堆内存地址是否一样。

结论

equals和==的区别,需要分情况讨论:

  1. 没有重写 equals ,则 equals 和 == 是一样的。

  2. 如果重写了 equals,则需看 equals 的方法实现。以 String 类为例:

  3. equals 是比较字符串的内容是否一样;

  4. == 是比较字符串的堆内存地址是否一样,或者说引用的值是否相等。

相关文章

  • 原来String是这样的(下)

    前言 回顾 我们讲到了String的equals和==的区别: equals根据你编写的方法体来进行比较,而==是...

  • 【面试1】

    基础 1、equals和==(equals和==的区别)equals:是Object的一个方法,实现对象的比较;复...

  • 面试流水(一)

    一、==和equals的区别 1、==可以用于值比较和对象比较,后者只能用于对象比较 2、对象进行比较时:二者都是...

  • Java知识点总结

    Java知识点1、==和equals的区别基本类型比较==比较内容 equals比较地址值引用类型比较==比较地址...

  • ==和equals

    ==和equals的区别: ==和equals方法都是用来比较两个变量/对象是否相等。 如果没有重写equals方...

  • 字符串和数组

    字符串比较时equals和==的区别(substring和+都会产生一个) equals是比较字符串的内容,内容一...

  • 使用equals和hashcode 比较java对象

    使用equals和hashcode 比较java对象 equals和hashcode之间的关系是什么?当比较jav...

  • Java基础

    "=="和equals区别 "=="是比较的内存地址,equals是Object的方法,默认是比较两个对象内存地址...

  • String

    1、equals和==区别 ==:对于基本数据类型,比较的是值,对于对象,比较的是内存中的地址 equals:属于...

  • Java中的比较?

    参考Java基础之comparator和comparable的区别以及使用 1.== 和 equals的区别 2....

网友评论

      本文标题:使用equals和==进行比较的区别

      本文链接:https://www.haomeiwen.com/subject/pgvkwdtx.html