欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中==和equals的区别

程序员文章站 2022-04-16 08:16:18
...

  在初期学习java时,肯定会遇到==和equals的区别这一知识点,其实很简单,一句话:equals:比较字面值;==:不止比较字面值,还比较对象的内存地址。

先来一段代码:

@Test
public void test(){
    String str1="abc";
    String str2="abc";
    System.out.println(str1==str2);
    System.out.println(str1.equals(str2));
    //结果都为true,因为str1创建时在堆中开辟了一块新的内存,存储abc,str则保存在栈中,而str2在创建时,由于abc已经
    //存在,所以直接把内存地址给str2,而没有重新开辟新的内存地址,所以,打印结果都是true
    String str3=new String("def");
   String str4=new String("def");
   System.out.println(str3==str4);
   System.out.println(str3.equals(str4));
   //==打印的是false,equals打印的是true,因为new String 不管之前的内容是否在内存中已经存在
   //在新定义时,都会重新开辟一块内存来存储这块内容,从而str3和str4的内存地址是不同的。
  
}

至于为什么new String()会开辟一块新的内存呢,追一下源码:

java中==和equals的区别

从new String()的源码可以看出,new String()会更改hash值,所以会重新给定义的字符串分配内存地址,这样,就算定义的字符串值是一样的,内存地址也是不同的啦。

 

 

相关标签: ==和equals