equals与equal的区别,说明==和equals的区别,并举例
如何解决写爬虫IP受阻的问题?立即使用。
我们先介绍一下JVM中内存分配的知识:
(推荐课程:java课程)
在JVM中,内存分为堆内存和栈内存。两者的区别在于:当我们创建一个新的对象时,我们会调用对象的构造函数来打开空间,将对象数据存储在堆内存中,同时在堆栈内存中生成相应的引用。当我们调用后续代码时,我们都使用堆栈内存中的引用。还应该注意,基本数据类型存储在堆栈存储器中。
对等于和==区别的初步认识;
==是判断两个变量或实例是否指向同一个内存空间,equals是判断两个变量或实例指向的内存空间的值是否相同。==是指比较内存地址,equals()是指比较字符串的内容。==指引用是否相同,equals()指值是否相同。
用一张图简要说明他们的关系:
测试:
equals和==之间区别的解释:
==比较变量(栈)内存中存储的对象的(堆)内存地址,用于判断两个对象的地址是否相同,即是否引用同一个对象。比较才是真正的指针操作。Equals用于比较两个对象的内容是否相等。因为所有类都是从java.lang.Object类继承的,所以它适用于所有对象。如果这个方法没有被覆盖,object类中的方法仍然被调用,而object中的equals方法返回==的判断。
S= ABCD 是一种非常特殊的形式,与new有本质的区别。这是java中生成对象的唯一方法。用字符串s= abcd形式赋值在java里叫直接量,是在常量池里而不是像new一样放在压缩堆里。
在这种形式的字符串中,字符串滞留发生在JVM内部,即当声明这样一个字符串时,JVM会先找出常量池中是否存在一个值为 abcd 的对象,如果有,就赋给当前引用。也就是原引用和当前引用指向同一个对象,如果不是,就在常量池中创建新的 abcd ,如果下次有字符串s1=abcd。S1也会指向对象‘ABCD’,也就是以这种形式声明的字符串。只要值相等,任何多个引用都将指向同一个对象。
而String s=新字符串( ABCD );和其他任何对象一样,每次调用都会生成一个对象,只要它们调用。你也可以这么理解:String str= hello首先在内存中查找对象 hello ,如果是,让str指向那个 hello 。
如果内存中没有“hello ”,则创建一个新对象来保存“hello”。String str=new string (hello )表示创建一个新对象来保存 hello ,而不管内存中是否已经有 hello 对象。
测试:
推荐:java入门以上是equals和==区别的详细解释。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。