黑马程序员技术交流社区

标题: 哪位高手可以给我详解一下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 方法在非空对象引用上实现相等关系: 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