.equal()和==的区别
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()和==的区别的更多相关文章
- C#中equal与==的区别
C#中equal与==的区别 来源 https://www.cnblogs.com/dearbeans/p/5351695.html C#中,判断相等有两种方式,一种是传统的==操作,一种是objec ...
- java中==与equal()方法的区别
==比较的是对象的地址,也就是是否是同一个对象: equal比较的是对象的值. Integer r1 = new Integer(900);//定义r1整型对象Integer r2 = new Int ...
- .equal与==的区别
==比较的是对象的地址,也就是是否是同一个对象: equal比较的是对象的值. Integer r1 = new Integer(900);//定义r1整型对象Integer r2 = new Int ...
- 【转】java中equal与==的区别 其中有个缓冲区,需要注意
转自http://www.cnblogs.com/dolphin0520/p/3592500.html 在学Java时,可能会经常碰到下面的代码: 1 String str1 = new String ...
- hashCode()方法和equal()方法的区别
本文参考地址:http://www.cnblogs.com/zgq0/p/9000801.html hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等 ...
- 关于Java中equal 和 == 的区别
在对Java开发还不熟练的时候,往往很多人都喜欢用==去比较两个对象是否相等,有时候就会出现很奇葩的问题. 其实这类问题并不是奇葩问题,只是我们不够细心而已,在Java中“==”比较两个变量本身的值, ...
- ==与equal在java中应用的感悟
今天又算是长见识了.了解了下平时不注意的equal和==的区别. 不管是==又或是equal都是用来比较相同与否.当问题就在这里了,比较什么相同呢? 我的在日常的比较无非也就是两种:1.基本数据类型之 ...
- 对比C#中==与equal方法
C#中equal与==的区别 收藏 对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false.对于string 以外的引用类型,如果两个对象引用同一个对象,则 == ...
- 【Java】 子字符串的比较(substring的==与equal()使用)
public class Test { public static void main(String[] args) { String str1="good"; System.ou ...
随机推荐
- 007、MySQL日期取当前时间,取昨天
#取今天文本格式 SELECT DATE_SUB( curdate( ), INTERVAL DAY ); #取昨天文本格式 SELECT DATE_SUB( curdate( ), INTERVAL ...
- mysql 视图入门
- 修正png
这是修正+取MD5的方法 function MD5FileTextPng(filename: AnsiString): AnsiString; var buf: ..MAX_PATH - ] of C ...
- P1003 我要通过!
转跳点:
- POJ 3321:Apple Tree 树状数组
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 22131 Accepted: 6715 Descr ...
- JS - n次方计算
pow 方法返回底表达式的指定次幂. Math.pow(base, exponent) 参数base 必选项.表达式底的值. exponent 必选项.表达式的指数值.
- 《学习R》笔记:科学计算器、检查变量和工作区、向量、矩阵和数组、列表和数据框
一.第二章 科学计算器 要检查两个数字是否一样,要使用 all.equal() ,不要使用 == ,== 符号仅用于比较两个整型数是否存在相同 . > all.equal(sqrt(2)^2,2 ...
- 18.swoole学习笔记--案例
<?php //创建webSocket服务器 $ws=); //open $ws->on('open',function($ws,$request){ echo "新用户 $re ...
- 106-PHP查看类成员属性
<?php class mao{ //定义猫类 public $age; //定义多个成员属性 protected $weight; private $color; } $mao1=new ma ...
- 【SQL必知必会笔记(1)】数据库基础、SQL、MySQL8.0.16下数据库、表的创建及数据插入
文章目录 1.数据库基础 1.1 数据库(database) 1.2 表(table) 1.3 列和数据类型 1.4 行 1.5 主键 2.什么是SQL 3.创建后续练习所需数据库.表(MySQL8. ...