黑马程序员技术交流社区

标题: ==和equals的区别 [打印本页]

作者: 伊廷文    时间: 2013-3-27 21:53
标题: ==和equals的区别
==和equals的区别
作者: HM周一帆    时间: 2013-3-27 21:58
1.“==”用于比较两个同类型的值是否相等,而equal是比较两个object的实例是否相等(判断地址是否相同
)。// 不是变量引用的对象是否相等.

2.而string类型对象的==和equals 都是比较值,这是比较特殊的

2. "=="比"equal"运行速度快,因为"=="只是比较引用. 因为对象变量的存储的是对象在内存中的路径,即内存地址。所以用“==”比较时,即使对象的值相等,

3. ==比较的是栈内的内容,就是值类型的比较或者对引用的比较。

4. 值类型用“==”比较,就是比较的值,引用类型比较则是比较这两个引用类型的存在栈内的地址是否相同。
5. Equals()分为虚拟方法和静态方法两种

但是Equals()的虚拟方法常常被override,以比较引用类型实际的值,这是它最重要的用途,

6. Equals,比较的是两个对象的内容是否一样.

作者: 蔡陶军    时间: 2013-3-27 22:13
本帖最后由 蔡陶军 于 2013-3-27 22:20 编辑

楼主我理解是这样的

毕老师说过什么类型都可以进行比较;

“==”是比较的两个数据类型的值(内存中的地址)是否相等
范例:
public class TestDemo {
        public static void main(String[] args) {
                char a='c';
                char b='c';
                System.out.println(a==b);
        }
}


“equals”是比较的两个String类型的类容是否一样
范例:
public class TestDemo {
        public static void main(String[] args) {
                String a="ccc";
                String b="ccc";
                System.out.println(a.equals(b));
        }
}

另外如果有一个String声明了一个字符串,如果接下来有声明一个String的字符串变量也和第一个一样,那么他们用==和equals得到的结果都是true因为他们的内容一样,而且地址也是一样的,因为有一个字符串常量池。

范例:来个杂交的 让你自己看看
public class TestDemo {
        public static void main(String[] args) {
                String a="ccc";
                String b="c";
                String c=b+"cc";
                String d="ccc";
                System.out.println(a==d);
                System.out.println(a.equals(d));
                System.out.println(a.equals(c));
                System.out.println(a==c);
        }
}

打印结果是:






作者: 丘凤光    时间: 2013-3-27 22:26
楼主搞笑的吧,这个问题被问过好多回的了,我都回答了两回了
版规里有说提问前先搜索一下的吧
作者: 丘凤光    时间: 2013-3-27 22:28
这个问题被问过好多回的了,我都回答了两回了
版规里有说提问前先搜索一下的吧
作者: 聂斌    时间: 2013-3-27 23:12
(1).==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
(2).对于String a = “a”; Integer b = 1;这种类型的特有对象创建方式,==的时候值是相同的。
(3).基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。
(4).一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同。

下面说说equals 方法:

equals 方法是Object类中的一个方法,一般会被子类复写,像String类就复写了Object类的equals方法,String类的equals方法是比较的字符串的内容(建议查看String类源代码就一清二楚了),如果子类没有复写Object类的equals方法的话,那么Object类的equals方法是这样实现的,源代码:

public boolean equals(Object obj) {
return (this == obj);
    }

所以如果子类不重写equals方法的话,它就等价于==,,,,






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2