黑马程序员技术交流社区
标题:
关于==和equals()的问题,求解
[打印本页]
作者:
wupingtanlu
时间:
2012-5-12 22:30
标题:
关于==和equals()的问题,求解
第一段代码:
public class EqualsMethod {
public static void main(String[] args) {
String n1=“abc”;
String n2=new String(“abc”);
System.out.println(n1==n2);
System.out.println(n1.equals(n2));
}
}
运行结果:false true
第二段代码:
class Value
{
int i;
}
public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
}
运行结果:false
想问的问题:1.在java中“==”比较的是两个对象的什么啊?是物理地址么?而equals()比较的是内容。
2.请对上面两段代码的关键语句给予解释,当时听视频是没有明白,创建对象,及对象池的相关内容,唉没搞懂啊!求解释!
作者:
余耀明
时间:
2012-5-12 22:38
java中“==”是比较对象的引用,也就是物理地址!
第一段代码中: System.out.println(n1==n2);n1与n2是不同的对象的引用,物理地址不等,所以返回false。
System.out.println(n1.equals(n2)); 在Object类中有equals()方法,其实现也是比较物理地址,但其子类可以进行复习,String类中就复写了此方法,是比较String类的内容是否相同,相同就返回true。
作者:
蒋映辉
时间:
2012-5-12 23:20
本帖最后由 蒋映辉 于 2012-5-12 23:37 编辑
首先建议楼主掌握数据在内存中的存放位置 引用一下其他帖子田林童鞋的一个回答
栈(heap)内存中存放基本类型,引用,局部变量;
堆(stack)内存中存放new出来的对象;
方法区(共享区,数据区)中存放静态变量,字符串常量,方法代码。方法区的代码被调用时,将在栈中开辟空间。运行完后,栈中的空间被释放。
对于第一个例子 楼主可以用hashCode()来看一下,实际n1跟n2的地址是相等的。因为他们都在方法区(方法区里边相同的数据只能存在一个)。所以==为true
而用.equals()方法的话 首先要比较类型是否相等,n1是字符串,n2是一个对象,所以肯定是false。
对于第二个例子,v1和V2是两个不同的对象,物理地址不一样 所以返回false
。
作者:
蒋映辉
时间:
2012-5-12 23:37
。。。。。
作者:
黑马-王建雨
时间:
2012-5-12 23:53
在java中“==”比较的是两个对象的在内存中存储的地址值。十六进制数值表示的。
而equals()比较的是对象的具体内容。
第一段代码:
public class EqualsMethod {
public static void main(String[] args) {
String n1=“abc”;//
n1代表一个对象的地址值。
String n2=new String(“abc”);//n2代表两个对象的地址值。
System.out.println(n1==n2);//
显然结果为false
System.out.println(n1.equals(n2));//
然而n1和n2所代表对象的内容是相同的。结果当然为true
}
}
运行结果:false true
第二段代码:
class Value
{
int i;
}
public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));//
你调用equals方法前,系统默认调用了hashcode方法先进行比较两对象的哈希值。显然不同,则不再比较i的具体内容,结果为false。若你用的是==比较,则直接比较i的具体值,结果就为true了。
}
}
运行结果:false
作者:
钟成军
时间:
2012-5-12 23:55
对这个概念我也有些模糊{:soso_e102:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2