A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wupingtanlu 中级黑马   /  2012-5-12 22:30  /  1448 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第一段代码:
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.请对上面两段代码的关键语句给予解释,当时听视频是没有明白,创建对象,及对象池的相关内容,唉没搞懂啊!求解释!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

6 个回复

正序浏览
对这个概念我也有些模糊{:soso_e102:}
回复 使用道具 举报
在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:37 编辑

首先建议楼主掌握数据在内存中的存放位置  引用一下其他帖子田林童鞋的一个回答
栈(heap)内存中存放基本类型,引用,局部变量;
堆(stack)内存中存放new出来的对象;
方法区(共享区,数据区)中存放静态变量,字符串常量,方法代码。方法区的代码被调用时,将在栈中开辟空间。运行完后,栈中的空间被释放。
对于第一个例子  楼主可以用hashCode()来看一下,实际n1跟n2的地址是相等的。因为他们都在方法区(方法区里边相同的数据只能存在一个)。所以==为true
而用.equals()方法的话 首先要比较类型是否相等,n1是字符串,n2是一个对象,所以肯定是false。
对于第二个例子,v1和V2是两个不同的对象,物理地址不一样  所以返回false

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
java中“==”是比较对象的引用,也就是物理地址!
第一段代码中: System.out.println(n1==n2);n1与n2是不同的对象的引用,物理地址不等,所以返回false。
                      System.out.println(n1.equals(n2)); 在Object类中有equals()方法,其实现也是比较物理地址,但其子类可以进行复习,String类中就复写了此方法,是比较String类的内容是否相同,相同就返回true。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马