== 和 equals 的区别
来源:互联网 发布:淘宝直播在哪里开通 编辑:程序博客网 时间:2024/06/03 16:40
首先得介绍一下虚拟节(jvm)内存
在JVM中 内存分为栈内存和堆内存。二者有什么区别呢?
当我们创建一个对象(new Object)时,就会调用它的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用,还需注意的一点,基本数据类型是存储在栈内存中。有了一定的了解 我们来看Equals和==的区别。
首先equals和== 最大的区别是一个是方法一个是运算符,在Java中,二者比较的都是物理地址 而不是值得比较。
我们举个例子这样比较直观。
Student student1 = new Student();
Student student2 = new Student();
System.out.println(student1.equals(student2));
System.out.println(student1 == student2);
不论是用的是哪一种方法 , 最终的结果显示的都是false,大家不妨可以试一下。为什么呢?就是因为他们比较的不是对象中字段的值或者说本身对象的值,而比较的是物理地址。
我们再来举一个例子。
String a = new String("a");
String b = new String("a");
System.out.println(a == b);
System.out.println(a.equals(b));
当我们创建2个String对象是 我们会发现 执行的结果是 false true。为什么这次euqals返回的值编程了true?因为此时equals方法不单单是比较物理地址 同时也比较了值,
在String中 equals方法被重写 当物理地址不同时,会进一步比较值,代码如下:
if(object instanceof String){}
那么问题来了 当我调用
System.out.println(student1.toString().equals(student2.toString()));时,结果又是怎样的?
结果却返回了false.为什么呢?这就牵扯到了hashcode的问题。
shift+alt+s可以重写hashcode和equlas方法
- “=”和“equals()”的区别
- java ==和equals、equals和hashCode的区别
- 关于“==”和“equals”的区别
- 关于Equals 和== 的区别
- equals和==的区别
- equals 和 == 的区别
- equals 和 == 的区别
- ==和Equals的区别
- equals 和 == 的区别
- equals 和 == 的区别
- equals和==的区别
- equals 和 == 的区别
- equals和==的区别
- 关于==和equals的区别
- Equals和“==”的区别
- == 和equals() 的区别
- equals("")和“==”的区别
- equals 和 == 的区别
- python学习之 字符串前'r'的用法
- CodeForces
- Linux文件---标准IO概述
- Unity3d 场景搭建 基础 学习
- Android蓝牙2.0框架帮您高效交互2.0协议下位机
- == 和 equals 的区别
- c语言中的整形提升
- MyBatis学习(二)-增删改查基于XML
- Struts2 的多组 radio 设计
- Linux 常用命令
- jenkins重置密码
- [Java多线程 二]---线程的状态与基本操作
- bind函数
- 计算机基础之为什么要有补码运算及反码加1得补码的原理