“==”和 equals的区别:

原创 2015年07月11日 08:44:46

“==”和 equals的区别:
先说结论:“==”比较的是对象的内存地址
equals比较的是内容是否相等
先看实验结果:
实验代码:

        String str_one = "adc";
        String str_two = "adc";
        String str_three = "adcd";
        String str_four = "ad"+"c";
        String str_five = new String("adc");
        System.out.println(str_one == str_two);
        System.out.println(str_one.equals(str_two));
        System.out.println(str_one == str_three);
        System.out.println(str_one.equals(str_three));
        System.out.println(str_one == str_four);
        System.out.println(str_one.equals(str_four));
        System.out.println(str_one == str_five);
        System.out.println(str_one.equals(str_five));

实验输出结果:

true
true
false
false
true
true
false
true

结论分析:
1.通过第一组和第三组的对比,发现给String类型的对象赋值的时候,如果要赋值的是相同的字符串,那么系统其实是把这个相同字符串的地址给了多个String对象,他们指向同一个地址。
所以用“==“比较内容相同的不同String对象时候,结果是相等的,因为他们只想共同的内存地址,这里我想源码设计中用到的应该是享元设计模式,就是当代码初次定义了一个String对象并赋值”adc“之后,系统会给这个”adc“分配一块内存地址,让str_one指向这个地址,而以后如果有其他String对象再次赋值为”adc“系统不会另辟空间给该对象,而是同样让它指向之前的那块地址。

2.第二组的比较没有什么好解释的,新的String对象有新的值,就另辟一块新的内存空间。(想象力比较丰富的同学应该回想如果新的字符串内容是包括之前的”adc“的,新的字符串会不会重复利用之前的对象来组拼,我想应该是不会的,享元模式是为了一定程度上节省内存,而重复利用带来的内存节省并不足以弥补它带来的复杂度。)

3.最后的一组的对比很能说明”==“和equals方法的区别
我们重新new了一个String对象赋值给我们新创建的对象,所以肯定是系统先开劈一块新的内存地址给这个对象,然后把内容放进去。
”==“比较结果为false说明,它们的地址是不同的。
equals比较结果为true,很明显是因为我们为他们赋了相同的值

顺便说下两种创建字符串对象的区别:
** String str = “abc”;这种方式赋值的字符串是存放到栈内存的静态变量池中的,每创建一个新的String引用它就会先到静态池中寻找有没有它要赋值的字符串,有就直接指向那个对象,没有就创建一个新的。
** String str_new = new String(“abc”); 这种方法每次都会创建一个新的String对象。这里每次会创建两个对象,一个是str_new作为String对象,一个是“abc”作为内存对象保存在堆内存中。

java中equals和==的区别.doc

  • 2011年06月02日 09:49
  • 42KB
  • 下载

Java 中 Equals和==的区别

在谈论equals和==的区别前,我们先简单介绍一下JVM中内存分配的问题。 在JVM中 内存分为栈内存和堆内存。二者有什么区别呢? 当我们创建一个对象(new Object)时,就会调用它的构造函数...
  • tcytcy123
  • tcytcy123
  • 2016-03-09 16:19:38
  • 22010

equals()与==的区别与实际应用

equals()与 == 在java编程或系统实际可发中都会用到,但是二者又有实际的区别。千万不要理所当然地认为equals()与==的作用就是一样的,下面就一步步来阐述二者的区别。phone.jav...
  • qq_33290787
  • qq_33290787
  • 2016-07-02 12:02:05
  • 2834

equals和==的区别及详解

equals和==的区别 java中equals();方法的源代码是 public boolean equals(Object obj){ return (this=obj); } equals方法只...
  • CISHENGBUHUAN666666
  • CISHENGBUHUAN666666
  • 2017-04-29 20:16:35
  • 1199

Java中==号与equals()方法的区别

==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值:int x = 10; ...
  • StriverLi
  • StriverLi
  • 2016-11-01 17:29:08
  • 12297

hashcode代码

  • 2015年11月20日 19:55
  • 47KB
  • 下载

==和equals的应用区别

  • 2012年06月12日 15:31
  • 12KB
  • 下载

面试基础整理(一)---Java中==和equals的区别

最近开始回头复习Java基础内容,在遇到==这个关系运算符和equals运算符时,发现了很多有趣的现象。 代码如下: //基本数据类型的比较 int num1 = 10;...
  • chance2015
  • chance2015
  • 2016-05-16 19:02:37
  • 6097

简单明了理解java中的“==”和“equals”的区别

在java中,首先我们理解基本数据类型和引用数据类型。 所谓基本数据类型,就是数据的值直接存储在内存的栈空间,不存在“引用”的概念,有8种基本数据类型,byte(1个字节),boolean(1个字节)...
  • oShuangLengChangHe12
  • oShuangLengChangHe12
  • 2017-10-29 16:30:57
  • 262

equals(Object) 与 == 的区别

  • 2010年09月03日 15:49
  • 27KB
  • 下载
收藏助手
不良信息举报
您举报文章:“==”和 equals的区别:
举报原因:
原因补充:

(最多只允许输入30个字)