对象比较中equals与==的区别
来源:互联网 发布:苏州2017打车软件 编辑:程序博客网 时间:2024/05/17 20:32
关于变量之间的比较,可以分为基础类型变量的比较和对象之间的比较。
对于基本类型来说,他们存储在jvm的栈中,因此比较的是变量的内容,也就是比较的变量的值。
对于引用类型来说,因为对象内容存储在jvm的堆中,栈中只是存储对象的引用(地址),无论是==还是equals比较的都是栈中的内容,即对象的引用,也就是比较的是两个对象的地址。但根据创建对象的方式不同可以分为两种情况:
1. 使用表达式创建对象:
2.使用new方法创建对象:
这里会引入两个新的问题:
1.为什么表达式创建和new创建,会让==比较产生不同的结果。
这是因为jvm在程序运行的时候会创建一个缓冲池,当使用表达式创建的时候,程序会在缓冲池中寻找相同值的对象,如果找到,就把这个对象的地址赋给当前创建的对象,因此,c和d实际上都指向了c的引用。因此在使用==时会返回true。
当用new创建对象时,是在堆中重新分配内存,因此栈中的引用是不相同的,所以,a和b引用的是值相同的不同对象。所以a==b返回false
2.既然equals比较的是引用,那么a.equals(b)为什么返回true。这是因为在Integer里,重写了equals方法!
我们可以自己创建一个类,并验证。
1.当自定义Value类中没有重写equals方法时,调用equals方法返回结果为false。说明此时equals比较的并不是内容。
2.重写equals方法。
0 0
- 对象比较中equals与==的区别
- 【零碎JAVA】java中对象比较,equals与==的区别
- Java中两个对象的比较 equals()方法和==号的区别
- java中==与 String中 equals 和对象中equals比较
- java中对象的比较---==与equals的使用注意事项
- java中操作符“==”与对象equals()方法的比较
- 字符串的比较==与equals的区别
- Java中对象的比较 == 和 equals()
- Java中对象的比较 == 和 equals()
- String 用 ==与equals比较的区别,切记
- 比较compareTo与equals及==的区别
- ==与.equals方法的比较区别
- java字符串比较 == 与 equals的区别
- java中"equals"和"=="的区别比较
- java中使用equals和==比较的区别
- 【java中==与equals的区别】java中==与equals的区别
- 对象的比较==和equals()
- java String对象中‘==’,equals与compareTo函数的使用和区别
- TCP/IP详解卷1笔记_第四章 APR:地址解析协议
- LeetCode 131 Palindrome Partitioning
- java web实现img读取盘符下的图像《二》
- js设置手机号中间几位为隐藏星代替
- docker network
- 对象比较中equals与==的区别
- TensorFlow 基本概念和用法
- android开发艺术探索第三章 移动到指定位置和内外两种情况拦截分析
- 支持向量机通俗导论(理解SVM的三层境界)
- Unity3D MineCraft 使用Unity3D制作MineCraft 我的世界 存盘和读取问题解决
- HTML 基本格式
- 数据特征选择
- Mybatis-动态sql
- 第三天