equals与==的区别。

下面是equals的源码  

public boolean equals(Object anObject) {
  if (this == anObject) {  //如果两个对象相等则返回true
    return true;
  }
  if (anObject instanceof String) {  //字符串调用equals时
    String anotherString = (String)anObject;
    int n = value.length;
    if (n == anotherString.value.length) {  //如果两个字符串长度相等
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = 0;
    while (n-- != 0) {  //判断两个字符串相同下边的字符的值是否相同,如果出现不相等,就会返回false
    if (v1[i] != v2[i])
      return false;
      i++;
    }
    return true;
    }
  }
  return false;
}

equals: 用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

==: 包含基本数据类型的比较 以及判断引用是否指向堆内存的同一块地址。

下面我们举些例子说明下:

第一种情况:

String s1 = new String("test");
String s2 = new String("test"); System.out.println(s1==s2); //new String()两个字符串的显然不是同一块地址,故返回false
System.out.println(s1.equals(s2)); //两个字符串的值相同,故返回true 第二种情况:
String s1 = new String("test");
String s2 = s1; System.out.println(s1==s2); //由于s2引用了s1的对象,同一地址,返回true
System.out.println(s1.equals(s2)); //s1 = "test",s2 = "test",故返回true 第三种情况:
String s1 = "java";
String s2 = "java"; System.out.println(s1==s2); //因为s1 = "java",当定义s2 = "java"时"java"已经存在,s2引用缓存"java",所以引用地址想同,返回true
System.out.println(s1.equals(s2)); //很明显,s1.equals(s2),返回true
												

equals与==的区别的更多相关文章

  1. java equals和==的区别

    大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中 ...

  2. equals和==的区别 你真的掌握了吗?

    PS:最近读Java编程思想的时候发现了一些小问题.就是equals方法和==,感觉自己是真正掌握了,其实并没有.简单的记录一下. 学习内容: 1.equals 和 == 的区别  equals和== ...

  3. 【ASP.net】Equals 和 == 的区别

    在比较Equals 和 ==的区别前.我们先来了解下相关的知识 C#数据类型 1.值类型 值类型有: 值类型包括:简单类型.结构类型.枚举类型:引用类型包括:Object 类型.类类型.接口.代表元. ...

  4. 【java】由equals和==的区别引出的常量池知识

    equals和==的区别,百度查到的结果大都是:equals比较的是值,==比较的是引用地址. String str1 = "abc"; String str2 = "a ...

  5. 比较compareTo与equals及==的区别

    1.compareTo: 附上:源码: public int compareTo(String anotherString) {         int len1 = value.length;   ...

  6. Java笔记——equals和==的区别

    摔在这里几次,还是记下来吧. 原文:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html -------------- ...

  7. java中equals和==的区别 (转)

    java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...

  8. equals()和hashCode()区别?

    equals()和hashCode()区别? ------------------------------------------------- equals():反映的是对象或变量具体的值,即两个对 ...

  9. 【转】Java中equals和==的区别

    [转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...

随机推荐

  1. Android两个页面之间的切换效果工具类

    import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; ...

  2. Oracle查询数据库中的所有表

    SELECT A.TABLE_NAME 表英文名,       A.TAB_COMMENTS 表中文名,       A.COLUMN_ID 序号,       A.COLUMN_NAME 英文名,  ...

  3. Java 中Iterator 、Vector、ArrayList、List 使用深入剖析

    标签:Iterator Java List ArrayList Vector 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些 ...

  4. C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别 <转>

    作者:Statmoon 出处:http://leolis.cnblogs.com/   在编程过程中,数据转换是经常要用到的,C#中数据转换的方法很多,拿将目标对象转换为整型(int)来讲,有四种方法 ...

  5. 添加网络打印机的步骤(xp和win2008)

    1.如题,设置好打印机去的ip地址和子网掩码等信息. 2 .xp不像其他新的系统那么好用那么智能...只能慢慢来 如果是xp,注意,请添加网络打印机的时候选  :添加本地打印机,,记得哦 然后如图 然 ...

  6. docker 源码分析 五(基于1.8.2版本),Docker容器的创建

    前面讲到了docker容器得镜像,镜像其实是docker容器的静态部分,而docker容器则是docker镜像的动态部分,即启动了一个进程来运行,本篇最要来分析一下怎样创建并运行一个容器. 创建一个容 ...

  7. snoopy采集

    Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单.Snoopy正确运行需要你的服务器的PHP版本在4以上,并且支持PCRE(Perl Compatible Regular ...

  8. Rails学习笔记二

    rails框架: MVC模型:模型.视图.控制器 来自网站的请求先是被传递到路由,判断请求找出控制器中的方法,处理请求,控制器中的方法也被称作行为 行为可以与模型交互,访问数据库,并为视图准备信息 由 ...

  9. Myeclipse+AJAX+Servlet

    最近刚开始学AJAX的知识,这里介绍一个简单的Myeclipse+AJAX+Servlet项目. 此项目包含3个文件:index.jsp.check.java.还有一个需要配置的文件是:web.xml ...

  10. [BZOJ 3223 & Tyvj 1729]文艺平衡树 & [CodeVS 3243]区间翻转

    题目不说了,就是区间翻转 传送门:BZOJ 3223 和 CodeVS 3243 第一道题中是1~n的区间翻转,而第二道题对于每个1~n还有一个附加值 实际上两道题的思路是一样的,第二题把值对应到位置 ...