==和equals的区别
Posted a-pp-z-droplet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了==和equals的区别相关的知识,希望对你有一定的参考价值。
- ==的作用:
比较两个对象,当这两个比较对象是基本数据类型时,若两个比较对象值相等/不相等,就返回true/false。当这两个比较对象是引用类型时,就比较两个对象的堆内存地址,若相等/不相等,就返回true/false。
实例代码:
public class Temp { public static void main(String[] args) { // TODO Auto-generated method stub Integer int1 = 127; int int2 = 127; Integer int3 = 128; Integer int4 = 128; String str1 = "MyString"; String str2 = "MyString"; String str3 = new String(str1); System.out.println("int1==int2 "+(int1 == int2) + " int3==int4 "+(int3==int4)); System.out.println("str1==str2 "+(str1==str2)+" str1==str3 "+(str1==str3)); System.out.println("str1 equals str3 "+str1.equals(str3)); }
int1==int2 true int3==int4 false str1==str2 true str1==str3 false str1 equals str3 true
}
常量池存储着[-128,127]范围内的整数和使用String str = "StringContent"创建出来的字符串。因此
- 1)equals()的作用:
在该方法内,首先用==判断,然后用其他属性判断。
Object类里的equals方法:
public boolean equals(Object obj) { return (this == obj); }
String类里的equals方法:
public boolean equals(Object anObject) { if (this == anObject) { return true; } 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; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
由于所有类都直接或者间接继承了Object类,所以如果自定类没有重写equals方法,那equals就和==的效果一样。
以上是关于==和equals的区别的主要内容,如果未能解决你的问题,请参考以下文章