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

java 中==运算符与equals方法的区别

程序员文章站 2022-06-23 10:49:58
...

目录

java 中==运算符与equals方法的区别

对于字符串:

对于包装类:


java 中==运算符与equals方法的区别

使用equals()比较:
比较内容,内容相同则返回true;
使用==比较:
比较的是他们所指向的地址

内存空间
栈----存放类的引用地址
常量池----存放常量
堆----存放new创建的对象

对于字符串:

java 中==运算符与equals方法的区别

java 中==运算符与equals方法的区别

对于包装类:

java 中==运算符与equals方法的区别

one == two 【false】 对象vs对象 判断【两个引用】(地址)是否一致 ,one和two都是100,但用了两个new就是申请了两个不同的地址。

three == 100;实际完成的是一个自动拆箱的操作,包装类对象three还原出来的100这个数值。

three == four;

valueof(()方法的[-128,127]缓存区:
java 中==运算符与equals方法的区别

java 中==运算符与equals方法的区别

Integer  four = 100;装箱操作实际执行的是 Integer four = Integer.valueof(100);

   1/valueof(),返回一个整数实例,该实例表示指定的整型值。如果不需要新的Integer实例,则通常应优先使用此方法,而不应使用构造函数Integer(int),使用构造方法回申请新的内存。

   2.java为了提高执行效率,在valuof()方法执行的过程中,提供了一个类似常量数组的缓存区(对象池),当Integer  four = 100,第二次使用valueof()执行的过程中,传入的参数在[-127,127]之间时,则直接使用缓存区中的值,不生成新的实例化对象,及three和four指向同一块内存,所以three == four;返回值为true,如果不在[-128,127]之间则会隐式的调用new来实例化一个Integer类型,所以five == six 返回值为false(开辟新的内存空间)

    3.因为通过缓存频繁请求的值,此方法可能会显著提高空间和时间性能。此方法将始终缓存-128到127(包括)范围内的值,并且可能缓存此范围之外的其他值。

   4. 简单总结就是[-128,127]之间的包装类对象使用 " =="比较返回值为true,范围外的一般都为false。

   5. 除了float和double之外都可以使用常量池的概念,double 和 float 没有对象常量池。java 中==运算符与equals方法的区别

java 中==运算符与equals方法的区别

例题:

java 中==运算符与equals方法的区别

java 中==运算符与equals方法的区别

相关标签: JAVA