1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true

如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true

2.equals:String类对equals进行了重写:1)若是同一个对象,返回true;

2)若不是,则比较它们的值,值相同,返回true

重写代码:

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

3.示例:

public class String1 {

    public static void main(String[] args) {
// TODO 自动生成的方法存根 String str1 = new String("hello");
String str2 = new String("hello");
System.out.println("==比较 :"+ (str1 == str2)); //false
System.out.println("equal比较:"+ str1.equals(str2));
String str3 = new String("str1");
String str4 = "str1";
int hashCode1 = System.identityHashCode(str2);
System.out.println("str2的地址:"+hashCode1);
str2 = "str1";
System.out.println("==比较 :"+ (str3 == str4)); //false System.out.println("==比较 :"+ (str2 == str3));
System.out.println("==比较 :"+ (str2 == str4)); //true
System.out.println("equal比较:"+ str3.equals(str4));//true int hashCode2 = System.identityHashCode(str2);
System.out.println("str2的地址:"+hashCode2);
hashCode2 = System.identityHashCode(str3);
System.out.println("str3的地址:"+hashCode2);
} }

运行结果:

==比较 :false
equal比较:true
str2的地址:1704856573
==比较 :false
==比较 :false
==比较 :true
equal比较:true
str2的地址:705927765
str3的地址:366712642

4.正确重写equals重新需要注意五点:

1   自反性:对任意引用值X,x.equals(x)的返回值一定为true. 
   2   对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true; 
   3   传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true 
   4   一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变 
  5   非空性:任何非空的引用值X,x.equals(null)的返回值一定为false

经过重写后就跟==有本质的区别了:

equal:是用来比较两个对象内部的内容是否相等的,由于所有的类都是继承自java.lang.Object类的,所以如果没有对该方法进行覆盖的话,调用
的仍然是Object类中的方法,而Object中的equal方法返回的却是==的判断,因此,如果在没有进行该方法的覆盖后,调用该方法是没有
任何意义的。在java面向对象的处理中我们一般在javabean中都要选择重写equals方法,使用hibernate后,我们要生成数据库的映射文件与实体

类,这是我们就最好在实体类中进行equals方法的重写,重写时我们可以根据自己的定义来实现该方法只要遵守那五条原则,例如对于一个student类

我们定义只要在学号相同时我们就认为这两个对象时相等的;同时我们还要重写hashcode方法。
==:是用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。

参考博客:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452206.html

Java中“==”与equals方法的区别的更多相关文章

  1. java中“==”和equals方法的区别,再加上特殊的String引用类型

    ==和equals的区别: 1.==是运算符,而equals是基类Object定义的一个方法,并且equals使用==定义的 2.进行比较时,分为  基本数据类型  的比较和  引用数据类型 的比较 ...

  2. 【转】彻底弄懂Java中的equals()方法以及与"=="的区别

    彻底弄懂Java中的equals()方法以及与"=="的区别 一.问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差. ...

  3. 关于Java中的equals方法

    关于Java中的equals方法 欢迎转载,但是请填写本人的博客园原址https://www.cnblogs.com/JNovice/p/9347099.html 一.什么是equals方法 equa ...

  4. 一文搞懂--Java中重写equals方法为什么要重写hashcode方法?

    Java中重写equals方法为什么要重写hashcode方法? 直接看下面的例子: 首先我们只重写equals()方法 public class Test { public static void ...

  5. JAVA中“==”与equals()方法区别

    equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...

  6. C#中==与Equals方法的区别

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...

  7. JAVA中复写equals方法

    在JAVA中“==”用于比较两个引用对象的地址是否相同.但是如果我们想比较两个对象的内容是否相同,通常会覆写equals方法.equals方法用来比较两个对象的内容是否相等. package org. ...

  8. 如何在Java中避免equals方法的隐藏陷阱

    摘要 本文描述重载equals方法的技术,这种技术即使是具现类的子类增加了字段也能保证equal语义的正确性. 在<Effective Java>的第8项中,Josh Bloch描述了当继 ...

  9. 如何重写Java中的equals方法

    Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...

随机推荐

  1. 扩展Exception,增加判断Exception是否为SQL引用约束异常方法!

    在设计数据表时,如果将某些列设置为关联其它表的外键,那么如果对其进行增加.修改操作时,其关联表若没有相匹配的记录则报错,或者在对其关联表进行删除时,也会报错,这就是外键约束的作用,当然除了外键还有许多 ...

  2. 【Swift学习】Swift编程之旅---集合类型之字典(八)

    字典是一种存储相同类型多重数据的存储器.每个值(value)都关联独特的键(key),键作为字典中的这个值数据的标识符.和数组中的数据项不同,字典中的数据项并没有具体顺序. 字典写作Dictionar ...

  3. [爬虫资源]各大爬虫资源大汇总,做我们自己的awesome系列

      大数据的流行一定程序导致的爬虫的流行,有些企业和公司本身不生产数据,那就只能从网上爬取数据,笔者关注相关的内容有一定的时间,也写过很多关于爬虫的系列,现在收集好的框架希望能为对爬虫有兴趣的人,或者 ...

  4. SQL---一次插入多条数据【使用Union】

    --做测试的时候使用.--缺点:结果集的数量,类型都要一样.INSERT INTO Student ( StudentID, StudentName, StduentAge, StudentBirth ...

  5. JS数字键盘

    JS数字键盘,JS小键盘 CSS代码: #numberkeyboard { border: 1px solid #b3b3b3; background: #f2f3f7; height: 285px; ...

  6. WinForm 简单蒙版实现控件遮盖

    在Web上面要实现一个遮罩层或者说是蒙版吧,有了DIV那不算什么难事,只要给div定好位置和大小,把颜色的Alpha值设一下就有透明的效果.不过在Winform中实现起来就没那么简单了事.尝试过用一个 ...

  7. 15天玩转redis —— 第五篇 集合对象类型

    这篇我们来看看Redis五大类型中的第四大类型:“集合类型”,集合类型还是蛮有意思的,第一个是因为它算是只使用key的Dictionary简易版, 这样说来的话,它就比Dictionary节省很多内存 ...

  8. java中的几种取整函数

    舍掉小数取整:Math.floor(2)=2 舍掉小数取整:Math.floor(2.1)=2 舍掉小数取整:Math.floor(2.5)=2 舍掉小数取整:Math.floor(2.9)=2 负数 ...

  9. hibernate----N-1(一)

    *************************hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE ...

  10. [函數] Firemonkey 各平台 "简体" / "繁体" 判断

    目前的 Delphi 10 Seattle 的 TLang 尚不支持取得简体及繁体的语系字符,在能取得正确的语系字符后(整理中),才能使用下列函数判断: function ChineseLang(co ...