1.首先,equal和==最根本的区别在于equal是一个方法,而==是一个运算符。

  2.一般来说,==运算符比较的是在内存中的物理地址,.equal()比较的是哈希算法值是否相等(即hashcode),且基本数据类型只能用==来进行比较。如果比较的双方没有哈希值,那么此时==和equal()比较的都是物理地址,可以互相替换(事实上在object类中equal()方法就是用==实现的,只是在有的需要比较哈希值的类中equal()方法被重写了)。

  3.equal()可以重写,在set集合中,jvm就是根据hashcode(),和equal()这两个方法来判断元素是否重复,如果要重写,建议两个方法一起重写,否则可能会出现安全性问题。

  PS:下面讲个有趣的东西,也是面试常考的,==比较字符串。众所周知,字符串是被存在字符串池中的,那么什么情况下String a=String b呢?下面贴代码。

package compareString;

public class CompareString {
public static void main(String [] args){
String a="Ye";
String b="Tian";
String c="YeTian";
String d=new String("YeTian");
String e=a+b;
String f="a"+"b";
String g="Ye"+"Tian";
System.out.println(c==d);
System.out.println(c==e);
System.out.println(c==e.intern());
System.out.println(c==f.intern());
System.out.println(c==g);
}
}

输出结果如下:

false
false
true
false
true

  我们来一一说一下为什么,首先String c(YeTian)和String d,因为c是在字符串池创建的,保存在常量池里,d是new创建的对象,保存在堆上,所以内存地址肯定不同。然后String c和String e,这个很常见,运行时结果相等,但编译时虚拟机并不能确定结果是否相等,所以为e开辟了新的内存空间,故结果不等。再是c和e.intern(),intern()这个方法很有趣,为了节省内存空间,我们一般是在StringBuffer里操作字符串,但intern()这个方法同样实现了StringBuffer的某些功能,intern()方法的功能是,比较该String对象是否存在于字符串池内,如果存在,则返回池内的该值,如果不存在,则创建此字符串。因此,intern()方法一样可以实现内存优化的作用,但一般还是建议使用StringBuffer。再然后是c和f,这个理由和之前一样,编译期间不能确定结果。最后是c和g,因为String类使用+运算符的本质是创建StringBuilder对象并运行append()方法,得到的值再运行toString()方法,而toString()方法会检查字符串池内是否存在当前字符串,故c==g。

.equal()和==的区别的更多相关文章

  1. C#中equal与==的区别

    C#中equal与==的区别 来源 https://www.cnblogs.com/dearbeans/p/5351695.html C#中,判断相等有两种方式,一种是传统的==操作,一种是objec ...

  2. java中==与equal()方法的区别

    ==比较的是对象的地址,也就是是否是同一个对象: equal比较的是对象的值. Integer r1 = new Integer(900);//定义r1整型对象Integer r2 = new Int ...

  3. .equal与==的区别

    ==比较的是对象的地址,也就是是否是同一个对象: equal比较的是对象的值. Integer r1 = new Integer(900);//定义r1整型对象Integer r2 = new Int ...

  4. 【转】java中equal与==的区别 其中有个缓冲区,需要注意

    转自http://www.cnblogs.com/dolphin0520/p/3592500.html 在学Java时,可能会经常碰到下面的代码: 1 String str1 = new String ...

  5. hashCode()方法和equal()方法的区别

    本文参考地址:http://www.cnblogs.com/zgq0/p/9000801.html hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等 ...

  6. 关于Java中equal 和 == 的区别

    在对Java开发还不熟练的时候,往往很多人都喜欢用==去比较两个对象是否相等,有时候就会出现很奇葩的问题. 其实这类问题并不是奇葩问题,只是我们不够细心而已,在Java中“==”比较两个变量本身的值, ...

  7. ==与equal在java中应用的感悟

    今天又算是长见识了.了解了下平时不注意的equal和==的区别. 不管是==又或是equal都是用来比较相同与否.当问题就在这里了,比较什么相同呢? 我的在日常的比较无非也就是两种:1.基本数据类型之 ...

  8. 对比C#中==与equal方法

    C#中equal与==的区别 收藏 对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false.对于string 以外的引用类型,如果两个对象引用同一个对象,则 == ...

  9. 【Java】 子字符串的比较(substring的==与equal()使用)

    public class Test { public static void main(String[] args) { String str1="good"; System.ou ...

随机推荐

  1. JS 选择电脑中的文件目录

    按钮调用方法function CarryOut(){ var inputObj=document.createElement('input') inputObj.setAttribute('id',' ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-home

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  3. SpringMVC核心

    DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,与spring IoC容器无缝集成. 主要用作职责调度工作,本身主要用于 ...

  4. C语言里面和时间有关的函数

    参考链接 https://blog.csdn.net/ffcjjhv/article/details/83376767 0)Head file #include "time.h" ...

  5. Loadrunner11的关联问题 《转载》

    Loadrunner11的关联问题 链接:http://www.51testing.com/html/15/523415-821644.html

  6. 解决:Server IPC version 9 cannot communicate with client version 4

    使用idea的maven项目运行mapreduce程序Server IPC version 9 cannot communicate with client version 4 原因: Java初始化 ...

  7. 竟然把Ruoyi在我自己的Eclipse编译成功,并能跑通了。。。。服了我自己了

    前几天,下载最新ECLISPSE2019压缩包,解压缩成功,没提示不是免费:eclipse-jee-2019-12-R-win32-x86_64.zip然后我配置好了maven于是我1月2日晚一时兴起 ...

  8. 十九、SAP查询所有数据库表的所有数据

    一.我们打款SAP自带的一个演示数据库SCARR 二.表结构如下 三.代码如下 四.执行结果如下 我们对比一下数据库的内容,很perfect 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微 ...

  9. 144-PHP trim函数的使用

    <?php //定义多个字符串 $str1='whello12x'; $str2='3462hello'; $str3='xayABCaxy'; $str1=trim($str1,'a..z') ...

  10. Python写一个简单的爬虫

    code #!/usr/bin/env python # -*- coding: utf-8 -*- import requests from lxml import etree class Main ...