java —— equals 与 ==】的更多相关文章

Java equals()和hashCode()的联系 如果两个对象是相等的,那么它们必须有相同的哈希码. 如果两个对象具有相同的哈希码,他们可能相等,可能不相等. 如果两个对象是不同的类的实例 他们hashCode可能相等. 当两个对象是同一个类型的实例,他们hashCode相等,则他们相等. 约定:equals()为真那么hashCode也要相等. 结论: 一,equals()相等的两个对象,hashcode()一定相等. 二,equals()不相等的两个对象,却并不能证明他们的hashco…
大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中八大基本类型中自动变量的字面值(自动变量就是用int a = 1;这种形式来定义的变量).如果是自动变量比较值的话肯定是用==来比较,因为equals()是一个方法,所以必须由对象调用才可以用于比较.而自动变量既不是类的实例也不是类的引用所以不能用equals()方法. 2.boolean tem…
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据类型(类)   当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个…
问题 面试时经常会问起字符串比较相关的问题, 总结一下,大体是如下几个: 1.字符串比较时用的什么方法,内部实现如何? 2.hashcode的作用,以及重写equal方法,为什么要重写hashcode方法? 现在对以上几个问题,彻底做一个研究和小结. PS:本文使用jdk1.7 解析 1.Object类 的equals 方法 /** * Indicates whether some other object is "equal to" this one. * <p> * T…
public class StringEqualsObject { public static void main(String[] args) { String name="Tom"; Person p=new Person(name); System.out.println(name.equals(p)); System.out.println("p.toString():"+name.equals(p.toString())); System.out.prin…
一.equals和==的区别 1.1.equals之string字符串的比较 1.1.1.源码如下图 if (this == anObject) {            return true;  } 当两者是同一地址的时候,则直接返回true,即相等,若两者有一者不是string类型,则跳过两个if,返回false; 由源码可知,字符串先比较的是两者的大小,若不等,则直接返回false:当长度相等时,进而将字符串转为char数组来对每一个字符进行比较,由此可见,equals比较的是字符串的值…
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到h…
java基础学习总结--equals方法 一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 1 package cn.galc.test; 2 3 public class TestEquals { 4 public static void main(String[] args) { 5 /** 6 * 这里使用构造方法Cat()在堆内存里面new出了两只猫, 7 * 这两只猫的color,weight,height都是一样的, 8 * 但c1和c2却永远不会相等,这是因为…
)1. == 可以用来比较基本类型以及引用类型.在基本类型中 == 比较的是两个变量的值是否相等.在引用类型中,== 比较的是两个对象的内存地址是否相等. )2. equals 只能用来比较引用类型.所有的对象,如果他们没有重写equals方法,那么默认比较的就是两个对象的内存地址是否相等.如果重写后,则视具体业务逻辑而定.但是java中有很多常用类(String,File,Date)已经帮我们重写了equals方法.比较的是他们里面的内容是否相等. 我们在为自己定义的类重写equals方法的时…
equals与== 经常用于比较,用法如下:字符串比较相同用equals,普通数值(基本数据类型)比较用==, contentEquals下面讲 理论准备: java的基本类型如int.float,double等,执行int a = 5,时,在内存中直接存储的是5这个数字,而使用new关键字创建 一个对象时比如String str = "123",内存中先储存的是一个引用变量str,他存储的是一个指向"123"这个对象的内存地址 1. == 比较的是什么? == 比…
equals 众所周知,java 中的所有的类都继承自 Object 这个超类 ,他就是Java所有类的父类或祖先类,Object类里面有一个equals方法,并且提供了默认的实现,如下所示. public boolean equals(Object obj) { return (this == obj); } 从上面代码得知:如果自定的类没有覆盖 equals 方法,那么该方法是来判断两个对象是否相等. 而在实际使用常常需要覆写这个方法来改变判断两个对象在实际现实中是否相等.比如,判断学生是否…
Java的Object类中定义了equals方法,Object类中的equals方法源代码如下,从源代码中可以看出Object类中的equals方法是用来返回判断两个对象是否指向同一个对象(引用地址) public boolean equals(Object obj) { return (this == obj); } Ojbect类中的equals方法会被子类重写,例如String会重写equals方法,String的equals方法源代码如下, public boolean equals(O…
equals()方法 如果满足了以下任何一个条件,就不需要覆盖equals()方法: 1 类的每个实例本质上都是唯一的. 2 不关心类是否提供了“逻辑相等”的测试功能. 3 父类已经覆盖了equals,从父类继承过来的行为对于子类也是合适的. 4 类是私有的或是包内私有的,可以确定它的equals方法永远不会被调用. 如果类具有自己特有的“逻辑相等”概念(不同于对象等同的概念),而且父类没有覆盖equals()方法以实现期望的行为,就需要覆盖equals()方法.这通常属于“值类”的情形.值类仅…
java提高篇(十三)-----equals()方法总结 equal和==区别 ==比较对象基于内存引用,两个引用完全相同返回true Java 语言里的 equals方法其实是交给开发者去覆写的,让开发者自己去定义满足什么条件的两个Object是equal的. 所以我们不能单纯的说equals到底比较的是什么.你想知道一个类的equals方法是什么意思就是要去看定义. 超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等.该方法的源码如下: public boole…
今天阿里的人问我 equals 与hashcode的区别,我答不上来, 仔细查了一下,做了总结: (1) == 这是Java 比较内存地址,就是内存中的对象: java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: public class ComAddr{ public static void main(String[] args) throws Exception { String s1 = "nihao"; String s2 = "nihao&qu…
转:http://m.blog.csdn.net/blog/pengchua/2297547# 如果你为某个类写了equals方法,那么应该同时编写hashCode方法.如果没有提供hashcode方法,编译器不会报错,而且也可能不会遇到任何问题.但是将对象插入到基于冲突的哈希表(类java.util.Set也使用同样的哈希表实现)可能导致不可预料的后果.解决产生的问题,可能要花费大量的时间.所以一定要养成这样的习惯:如果编写了方法equals,同时也提供相应的hashcode方法 equals…
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据类型(类)   当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个…
equals 可以重写, == 不可重写 equals 是方法 equals 是 Object 的方法. 基本作用:判断两个对象是否为引用 public class Object { // 省略部分代码 public boolean equals(Object obj) { return (this == obj); } } 因为 java 中所有类都继承自 Object,所以任何一个类都有默认的 equals 方法,但是只能判断两个对象是否引用. 可根据自己的需求重载 equals 方法.例如…
原文https://www.dutycode.com/post-140.html 如何判断两个对象相等,这个问题实际上可以看做是如何对equals方法和hashcode方法的理解. 从以下几个点来理解equals和hashCode方法: 1.equals的作用及与==的区别. 2.hashcode的作用及与equals的关系.   1.equals的作用及与==的区别. equals被用来判断两个对象是否相等. equals通常用来比较两个对象的内容是否相等,==用来比较两个对象的地址是否相等.…
前言 上一篇文章 如何妙用 Spring 数据绑定? ,灵魂追问 环节留下了一个有关 equals 和 hashcode 问题 .基础面试经常会碰到与之相关的问题,这不是一个复杂的问题,但很多朋友都苦于说明他们二者的关系和约束,于是写本文做单独说明,本篇文章将循序渐进 ( 通过举例,让记忆与理解更轻松 ) 说明这些让你有些苦恼的问题,Let's go ....... 面试问题 1. Java 里面有了 == 运算符,为什么还需要 equals ? == 比较的是对象地址,equals 比较的是对…
一.简介 ==: == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象.比较的是真正意义上的指针操作. 1.比较的是操作符两端的操作数是否是同一个对象.2.两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过.3.比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆. equals: e…
通过某个特征值来判断两个对象是否"等价",当这两个对象等价时,判断结果为true,否则结果为false. Object类(Java的"对象世界"的根)中实现的equals方法,就是把"特征值"设定为"对象引用"来进行判断等价性的,因此可以得知,Object类中equals方法只是简简单单地返回this引用和被判断的obj的引用的"==运算"的值. 重写equals方法常规步骤 //方法1public boo…
1  如果不知道怎么重载hashcode, eclipse自动代码生成工具会帮助你生成,大概的思路是设定一个int prim,  然后根据各个成员的值或者hashcode值进行某种运算即可,具体什么运算,可以直接设计. 2  如果使用的HashSet等Hash性质的,使用的是hashcode, 不是equals, 因为这些值都是根据hashcode的值作为key: 3  如果是List的indexOf(),  则使用的是equals, 而不是重载的hashcode值, 除非重载的equals中调…
都是判相等,对于基本变量没区别,只是对动态变量(即对象)有区别: ==:引用相等(reference comparison).对于对象引用,即判断引用值也就是地址是否相等.即如果Object a,b,则 a==b 表示引用a和b的地址是否相等. equals():引用指向的内容相等(value comparison).是Object的方法,其实现是 return this == inputObject.但是常常会被覆盖,如String,Integer等都覆盖了该方法,判断对象引用所指向的内容是否…
要记住最有用的一点: equals 在已经被系统定义好的类中 是已经被重写好了的 父类中的 equals方法是比较的两个对象是否指向同一引用 在被定义除了父类以外比较的是两个对象的内容 因此 人为定义的类中 需要重写equals方法 人为的定义规则 还需要重写toString方法 toString 方法 父类的是这样的 public  String toString() { return getClass().getName()+"@"+getHex(Hashcode()); } 大致…
Object类概述 是所有类中的父类,最大的超类,所有的类都继承他. equals方法 比较2个对象是否相同,其实他是在比较两个对象的地址是否相同,在equals方法中我们用==来判断 但是比较2个地址相同实在没有什么意义,实际开发中我们可能会比较2个对象的属性是否一样,所以我们会在类中重写equals方法再调用 注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型…
equals()方法比较两个对象的引用是否相同 hashcode()方法比较两个对象的哈希码是否相同…
@Override    public boolean equals(Object obj) {        if(this == obj) {            return true;        }        if(obj == null){            return false;        }        if(!(obj instanceof course)){            return false;        }        course…
1.在写代码的时候,我们有时候需要判断两个相同类的对象的值是否全部相等,很多人想到的就是equals()方法,但是equals方法真的是可以比较吗?其实equals方法比较的并不是两个对象的值,它只是比较了两个对象是否指向同一个内存地址,如果想比较两个相同类的对象的值是否全部相等怎么办呢?办法是有的,可以重写equals()方法,例如图1: 图1…
一.equals方法定义 public boolean equals(Object obj)方法 //提供对象是否“相等”的逻辑 二.”equals“和“==”的区别 1.“==”比较的是两个变量本身的值,即两个对象在内存中的首地址,当然,既然是两个对象,name首地址就不一样,所以若是s1=s2这样的,那就是false错的. 2.“equals()”比较字符串中所包含的内容是否相同 例如: String s1,s2="abc"; s1=new String("abc&quo…