黑马程序员技术交流社区
标题:
哪位高手可以给我详解一下equals和==的区别
[打印本页]
作者:
李杰
时间:
2012-8-26 13:42
标题:
哪位高手可以给我详解一下equals和==的区别
真心求教:)
作者:
申俊伟
时间:
2012-8-26 14:04
对于两种对象间的比较,使用”==“运算符与equals()方法,”==”操作符用于比较两个变量的值是否相等,即比较对象所占内存是否相等,equals()方法用于比较两个对象的内容是否一致。想要弄清楚它们之间的区别就要先弄清楚对象在内存中的存放情况,以及对内存及栈内存之间的关系。
作者:
杨鹏鹏
时间:
2012-8-26 15:05
相等性的比较(==)
1:对于原生类型来说,比较的是左右两边的值是否相等。
2:对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。
equal()方法,该方法定义在Object类中,因此java中的每个类都具有该方法,对于Object类的equals()方法来说,它是判断调用equals()方法的引用于传递进来的引用是否一致,即这两个引用是否指向同一个对象,对于Object类来说等同于
==。
对于String类的equals()方法来说,它是判断当前字符串于传进来的字符串的内容是否一致,不要使用==。
作者:
黑马_许芸
时间:
2012-8-26 15:28
1
在原生数据类型中,只可用== 来表示两个数是否相等,不可以用equals方法比较。
2。在包装类型中,也即我们平时定义的类,默认的继承了 Object类,
equals方法 指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:
自反性
:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性
:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性
:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性
:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
而== 表示的是两个对象是否是同一个对象。
作者:
方志亮
时间:
2012-8-26 16:53
A:==
可以用于比较基本数据类型,比较的就是基本数据类型的值是否相等。
可以用于比较引用数据类型,比较的是对象的地址值是否相等。
B:equals
equals只能用于比较引用数据类型的。
Object提供的equals是用于比较对象地址值是否相同。
自定义类中,如果重写了equals方法,那么就是按照你自己的需求来比较的。
String s1 = new String("abc");
Strign s2 = new String("abc");
String s3 = "abc";
String s4 = "abc";
sop(s1==s2); //false
sop(s1==s3); //false
sop(s3==s4); //true
System.out.println(s1.equals(s2));// true
System.out.println(s1 == s2);// false
System.out.println(s1.equals(s3));// true
System.out.println(s1 == s3);// false
System.out.println(s2.equals(s4));// true
System.out.println(s2 == s4);
作者:
黑马-李勇
时间:
2012-8-26 16:59
-------------------------以下是论坛内容------------------------
----------
地址:
http://bbs.itheima.com/forum.php?
mod=viewthread&tid=17835&extra=page%3D1&page=1
java数据类型图:
┏数值型━┳━整数型:byte short int
long
┏基本数据类型━━┫ ┗━浮点型:float double
┃ ┣字符型:char
数据类型╋ ┗布尔型:boolean
┃ ┏类(class)
┗引用数据类型━━╋接口(interface)
┗数组(array)
java的数据类型分基本数据类型(原始数据类型)和引用数据类型;
1.基本八大类,图中可以很清楚的看到;这种类型的数据变量在声明之后
java就会立刻分配给他内存空间。如:short a; java会在可使用的内存
空间寻找一个占两个字节的块给a变量;
2.引用数据类型就那三种,类似C/C++的指针,它以特殊的方式指向对象
实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地
址,想具体知道看看数据结构就好了。
通俗讲,一、上图记住很够用;二、说内存、谈地址基本都是说引用而非
基本;三、你可以把内存地址理解是你学号,而对象实体就是你,每次找
你通过学号找,这就是引用;
这个知识点的应用:
1.“==”作用在引用数据类型间,判断内存地址是否相等,想判断内容实
体用equals;
2、基本传值传参传的是副本,修改后原值不变;引用传值传参穿的是地
址,修改后原值改变。
--------------------以上是论坛内容-----------------------------
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2