对于String中的“equal方法”和“==”一直有点混肴,今天重新看了一下他们两点的区别,记录下来让自己以后不在忘记!

先说“==”:

  “==”是用来比较两个String对象在内存中的存放地址是否相同的。例如,

1
2
3
4
5
6
7
8
9
String test1 = "test";
String test2 = "test";
 
String test3 = new String(test2);
String test4  =new String(test2);
 
 
blooean result1 = (test1==test2);
blooean result2 = (test3==test4);

其中:result1为true,result2为false。

原因:程序在运行时有一个字符串缓存机制,当String test1 = "test"的时候,程序先从缓存池中查找是否有相同的String 对象,如果有的话就不会重新生成而是用缓存池中的字符串对象;如果在字符串缓存池中没找到相同的字符串对象时才会在内存中开辟一块内存区新建字符串对象。对于test1,当test1建立以后会将“test”字符串放入缓存池中,所以运行 String test2 = "test"的时候就会直接从缓存池中取出相同的对象,也就说,test1和test2的内存地址是相同的,所以,result1是true。对于new来说,每new一次就会在内存中开辟一片内存区域,test3和test4的内存地址是不同的,所以result2是false。

再说“equal方法”:

  equal方法是object类的方法,object类中的equal方法也使用“==”实现的,也就是说,如果直接继承object类的equal方法,则也是比较两个对象在内存中的地址是否相同,但是在String中将继承自object的equal方法覆盖啦!String中的equal方法源码如下:

 1 /**
2 * Compares this string to the specified object. The result is {@code
3 * true} if and only if the argument is not {@code null} and is a {@code
4 * String} object that represents the same sequence of characters as this
5 * object.
6 *
7 * @param anObject
8 * The object to compare this {@code String} against
9 *
10 * @return {@code true} if the given object represents a {@code String}
11 * equivalent to this string, {@code false} otherwise
12 *
13 * @see #compareTo(String)
14 * @see #equalsIgnoreCase(String)
15 */
16 public boolean equals(Object anObject) {
17 if (this == anObject) {
18 return true;
19 }
20 if (anObject instanceof String) {
21 String anotherString = (String) anObject;
22 int n = value.length;
23 if (n == anotherString.value.length) {
24 char v1[] = value;
25 char v2[] = anotherString.value;
26 int i = 0;
27 while (n-- != 0) {
28 if (v1[i] != v2[i])
29 return false;
30 i++;
31 }
32 return true;
33 }
34 }
35 return false;
36 }

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

  1. Java中equal和==区别及String创建过程

    Java中equal和==区别 1.起因 在一段Java代码中,使用了两种实现方式. //第一种命令行输入 int main (String[] args) { if(args[0] == " ...

  2. java的==和equal的区别(一)

    java的==和equal的区别 “==”是用来比较两个String对象在内存中的存放地址是否相同的.例如, 1 2 3 4 5 6 7 8 9 String test1 = "test&q ...

  3. == 和equal的区别?-005

    1,== 和equal的区别? ==比较两个值是否相等,equal比较对对象的引用是否一致 举例: int a = 2; int b = 2; System.err.println(a == b);/ ...

  4. java中 == 与 equal 的区别

    http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html String str1 = new String("s ...

  5. C# 中==和Equal的区别

    http://new-fighter.iteye.com/blog/1634800 今天突然看到一种情况,颠覆了我对这比较使用方法的判断. 于是开始在网上找资料,但几乎都是Java的,好不容易找到一个 ...

  6. Java 关于 == 和 equal()的区别

    因为用new创建了两个对象,所以a和b指向两个不同的内存地址,所以返回false equal()是object的方法,所以只适用于对象,不使用于基本类型.不过equal()默认是用“==”比较两个对象 ...

  7. Java Script 中 ==(Equal) 和 === (Identity Equal) 的区别和比较算法逻辑

    判断两个变量是否相等在任何编程语言中都是非常重要的功能. JavaScript 提供了 == 和 === 两种判断两个变量是否相等的运算符,但我们开始学习的时候 JavaScript 的时候,就被一遍 ...

  8. 比较对象--"=="与"equal"的区别

    String stra=new String("你好"); String strb=new String("你好"); String strc=stra; bo ...

  9. java中==与equal()的区别

    ==和equal()都是用来判断两个变量是否相等的. (1)如果两个变量是基本类型变量,且都是数值型的(不一定数据类型相同),只要是值相同,将返回true; (2)如果两个变量是引用型变量,只有它们指 ...

随机推荐

  1. ckeditor 基础

    <!DOCTYPE html> <!-- Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights rese ...

  2. 显示进度条tqdm

    http://www.open-open.com/lib/view/open1451794925808.html

  3. 从0开始学习blockchain

    http://www.8btc.com/build-your-own-blockchain

  4. IOS应用的国际化

    IOS应用的国际化,主要分为3个部分: Info.plist 文件的国际化 .xib文件的国际化 .m文件的国际化 下面我就来一一说明. Info.plist 文件的国际化我们使用Xcode 4.5 ...

  5. TCP拥塞处理—Congestion Handing

      TCP拥塞处理-Congestion Handing 1 慢启动 2 拥塞避免 3 快重传/拥塞发生(拥塞发生时的快速重传) 4 快恢复

  6. Hive基础学习

    Hive 学习记录Hive介绍:Hive 是起源于Facebook,使得Hadoop进行SQL查询成为可能,进而使得非程序员也可以进进行对其使用:它是一种数据仓库工具,将结构化的数据文件 映射为一张数 ...

  7. ios xcode中所有自带的字体如下(最好结合NSMutableAttributedString相结合使用)

    // 打印系统中所有字体的类型名字 NSArray *familyNames = [UIFont familyNames]; for(NSString *familyName in familyNam ...

  8. Chapter 2 Open Book——5

    I was relieved that I had the desk to myself, that Edward was absent. 我能一个人一张桌子很开心,就因为Edward 没来. I t ...

  9. <context:annotation-config/>

    转自:Spring <context:annotation-config/> 解说 在基于主机方式配置Spring的配置文件中,你可能会见到<context:annotation-c ...

  10. 深入理解JAVA的多态性[转]

    昨天看到一个关于多态性的帖子,参考了回帖者的理解,加入了一些自己的看法,整理出来供大家参考,不一定完全正确,欢迎大家批评指正. (一)相关类 class A ...{         public S ...