equals与==的区别
来源:互联网 发布:淘宝蒙娜丽莎十字绣 编辑:程序博客网 时间:2024/05/16 06:51
以
String
类为例子说明eqauls
与==
的区别:
Java的虚拟机在内存中开辟出一块单独的区域,用来存储字符串对象,这块内存区域被称为字符串缓冲池。
当使用
String a = "abc"
这样的语句进行定义一个引用的时候,首先会在字符串缓冲池中查找是否已经相同的对象,如果存在,那么就直接将这个对象的引用返回给a,如果不存在,则需要新建一个值为"abc"的对象,再将新的引用返回a。
String a = new String("abc");
这样的语句明确告诉JVM想要产生一个新的String对象,并且值为"abc",于是就在堆内存中的某一个小角落开辟了一个新的String对象。`==`在比较引用的情况下,会去比较两个引用的内存地址是否相等。 String str1 = "abc"; String str2 = "abc"; System.out.println(str1 == str2); System.out.println(str1.equals(str2)); String str2 = new String("abc"); System.out.println(str1 == str2); System.out.println(str1.equals(str2)); 以上代码将会输出 true true false true **第一个true:**因为在str2赋值之前,str1的赋值操作就已经在内存中创建了一个值为"abc"的对象了,然后str2将会与str1指向相同的地址。 **第二个true:**因为`String`已经重写了`equals`方法:为了方便大家阅读我贴出来,并且在注释用进行分析: ``` public boolean equals(Object anObject) { //如果比较的对象与自身内存地址相等的话 //就说明他两指向的是同一个对象 //所以此时equals的返回值跟==的结果是一样的。 if (this == anObject) { return true; } //当比较的对象与自身的内存地址不相等,并且 //比较的对象是String类型的时候 //将会执行这个分支 if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; //在这里循环遍历两个String中的char while (n-- != 0) { //只要有一个不相等,那么就会返回false if (v1[i] != v2[i]) return false; i++; } return true; } } return false;} ``` 进行以上分析之后,就不难理解第一段代码中的实例程序输出了。
阅读全文
0 0
- equals与==,equals与hashcode的区别
- equals(Object) 与 == 的区别
- ==与equals的区别
- equals(Object) 与 == 的区别
- equals()与==的区别
- ==与equals()的区别
- equals与==的区别
- Java ==与equals()的区别
- equals(Object) 与 == 的区别
- ==与equals()的区别
- == 与 equals() 的区别
- equals(Object)与==的区别
- c# equals与==的区别
- equals()方法与==的区别
- ==与equals的区别
- c# equals与==的区别
- "=="与"equals()"的区别
- java equals与== 的区别
- activity启动流程简述
- 多线程
- ProcessRecord state
- Leetcode141. Linked List Cycle
- WPF listbox 的datatemplate中添加触发器,控制template中某个按钮的显示隐藏
- equals与==的区别
- spring swagge2配置
- 数据挖掘技术(一)——预处理
- CSS中关于字体样式p标签的属性
- java验证码的实现
- [IOS APP]婷婷诗教-有声系列
- 矩阵快速幂(裸,模板)
- android文件选择器
- 菜鸟Tablayout显示导航栏