“==”和 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”作为内存对象保存在堆内存中。

Hadoop-2.2.0搭建Spark-1.3.1

感谢分享:http://itindex.net/detail/53456-spark-1.3.1-hive

ComboBox的下拉框弹不出

创建CComboBox m_cbExamble; 在后面的代码中会不断使用这个变量。 向控件添加 Items:(三种方法)        1) 在Combo Box控件属性的Da...

==和equals方法究竟有什么区别

  • 2013年04月22日 10:17
  • 11KB
  • 下载

==和equals的应用区别

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

(转)Java中equals和==的区别

原地址:http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html java中的数据类型,可分为两类:  1.基本数据类型,...
  • duyiqun
  • duyiqun
  • 2016年01月04日 11:02
  • 169

equals(Object) 与 == 的区别

  • 2010年09月03日 15:49
  • 27KB
  • 下载

==和equals的区别

  • 2013年09月10日 14:27
  • 47KB
  • 下载

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

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

Java中的==和equals区别

  • 2013年01月30日 10:23
  • 15KB
  • 下载

java中equals和==的区别.doc

  • 2011年06月02日 09:49
  • 42KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:“==”和 equals的区别:
举报原因:
原因补充:

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