黑马程序员技术交流社区
标题:
equals与==
[打印本页]
作者:
王舒玮
时间:
2012-11-26 21:13
标题:
equals与==
equals与==的区别?
作者:
崔利鹏
时间:
2012-11-26 21:17
equals方法判断对象的内容是否相等,比较的两个字符串是否一样,"==" 比较的是值,是两个“引用”。
作者:
ssx0101
时间:
2012-11-26 21:22
“==”是比较两个基本类型变量的值是否相等,或者比较两个对象引用指向的对象是否是同一个对象;
“equals”是比较两个对象引用指向的对象值是否相等,基本类型没有“equals”方法。
作者:
邢晏玮
时间:
2012-11-26 21:28
==是判断两个变量或实例是不是指向同一个内存空间
equals是判断两个变量或实例所指向的内存空间的值是不是相同
eqauls 与 = =之异同
1)比较方式角度:
= =是面向过程的操作符;equals是面向对象的操作符
= =不属于任何类,equals则是任何类的一个方法;
我们可以 1)Primitive1 (基本类型)= = Primitive2(基本类型);
2)Object Reference1(对象引用)= = Object Reference2(对象引用)
3)Object Reference1 (对象引用) .equals(Object Reference2 (对象引用))
这三种比较
但却不能Primitive1 (基本类型).equals( Primitive2(基本类型));
方法成员。
2)比较目的角度:
1) 如果要比较两个基本类型是否相等,请用= =;
2) 如果要比较两个对象引用是否相等,请用= =;
3) 如果要比较两个对象(逻辑上)是否一致,请用equals;
作者:
陈重
时间:
2012-11-26 21:43
用一段代码说明下
public class TestEquals_1
{
public static void main(String[] args)
{
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2);//输出结果是fasle
System.out.println(s2.equals(s1));//输出结果是true
}
}
先说下==,这是一个比较运算符,返回值是布尔型,比较的是比较对象本身.
1 == 2,表达式为假返回false.上述代码中 s1 == s2,比较的是s1,s2本身.s1,s2本身
是引用(也就是地址了)代表的是两个不同地址,肯定不相等.
再来看看equals方法,它是Object类中方法,其作用也等价于==.
但是,s2是一个String引用,调用的是String类中的equals方法,通过API查阅可知,该方法被重写了
比较的是s1,s2指向的内容:"abc".所以输出的是true.
作者:
陈重
时间:
2012-11-26 21:46
多看API,多看毕爷视频.我学java10天了.
作者:
郑玉良
时间:
2012-11-27 10:33
==是同一个箱子(同一对象)
equals是两个箱子里面的东西(对象内容是否一样)
作者:
马海保
时间:
2012-11-27 13:33
== 比较对象的引用是否相同,引用就是对象地址 equals是对象的方法,基本上实现来比较对象自己的内容,字符串对象就是字符串值,你自己的对象就是你自己定义的规则
作者:
聽聽我dē❤
时间:
2012-11-27 14:31
值类型
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
对象比较
==比较的是2个对象的地址,而equals比较的是2个对象的内容。
显然,当equals为true时,==不一定为true;
一、String中的equals和==
1、
public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = "Monday";
}
}
上面这段程序中,到底有几个对象呢?
来检测一下吧,稍微改动一下程序
public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = "Monday";
if (s1 == s2)
System.out.println("s1 == s2");
else
System.out.println("s1 != s2");
}
}
编译并运行程序,输出:s1 == s2
说明:s1 与 s2 引用同一个 String 对象 -- "Monday"!
2.
再稍微改动一下程序,会有更奇怪的发现:
public class TestString {
public static void main(String[] args) {
String s1 = "Monday";
String s2 = new String("Monday");
if (s1 == s2)
System.out.println("s1 == s2");
else
System.out.println("s1 != s2");
if (s1.equals(s2))
System.out.println("s1 equals s2");
else
System.out.println("s1 not equals s2");
}
}
我们将 s2 用 new 操作符创建
程序输出:
s1 != s2
s1 equals s2
说明:s1 s2分别引用了两个"Monday"String对象
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2