==与equals()方法比较

简单来说,“==”用来比较基本数据类型,equals()方法用来比较引用数据类型

原理:基本类型数据存放在栈中,可直接用“==”用来比较,而引用类型数据存放在堆中,在栈中存放的是内存地址,用“==”来比较引用类型比的是内存地址,没有意义,所以要用“==”来写equals()方法来比较引用类型。最常见的是在字符串中用equals()来比较,那是因为在Java源码中已经帮我们重写了equals()方法(在equals方法内部还是用“==”),我们可以直接拿来使用,如用equals()比较其他引用类型,不可以直接拿来用,需要自己来重写equals()方法。


在字符串中有一种特别情况,字符串的创建方式有两种,一种是用new来创建一个对象,给对象赋值,这叫字符串变量,用new创建的数据都是放在堆中,在栈中存放内存地址,所以用equals()方法进行比较;另一种是直接在等号后面用双引号将字符串包裹起来,这叫字符串常量,也叫字面量,它是存放在方法区中的一个叫字符串池的地方,字符串池是为了节约内存空间,在创建字符串时先在字符串池中寻找,如果内容已存在,即将它的地址放在栈中,如果没有就在字符串池中分配内存,然后把地址放在栈中,因此相同内容的字符串地址也相同,可以用“==”来比较,当然也可以用equals()方法比较。


为了方便比较字符串我们一般都用equals()方法。


.

发布了15 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/deciduous_leaves/article/details/78309289