java 中 == 和 equals() 的区别
java数据类型
基本数据类型:byte,short,char,int,long,float,double,boolean
它们使用==
进行比较时,比较的是两个值是否相等
int a = 1;
int b = 1;
System.out.println(a==b);// true
引用数据类型:当它们使用==
进行比较的时候,比较的是它们在内存中的存放地址
。确切的说,是堆内存地址。
String a = new String("123");
String b = new String("123");
System.out.println(a==b);// false
System.out.println(a.equals(b));// true
对于引用数据类型,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。因为每new一次,都会重新开辟堆内存空间。
String a = new String("123");
String b = "123";
String c = b;
System.out.println(a == b); // false
System.out.println(a == c); // false
System.out.println(b == c); // true
System.out.println(a.equals(b)); // true
System.out.println(a.equals(c)); // true
System.out.println(b.equals(c)); // true
== 的作用:
基本类型:比较数值是否相等
引用类型:比较所引用对象在内存中的地址值是否相等
equals()方法:
默认情况下,equals()方法比较内存地址值是否相等。
java.lang.Object
public boolean equals(Object obj) {
//this - s1
//obj - s2
return (this == obj);
}
我们可以按照需求逻辑,重写对象的equals方法。
比如String类重写了equals()方法,比较的是两个字符串的内容是否相同。
java.lang.String
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;
}
提问:所以在字符串
比较中“==”和equals()的区别?
==:比较的是两个字符串内存地址(堆内存)的数值是否相等,属于数值比较;
equals():比较的是两个字符串的内容,属于内容比较。
注: 以后进行字符串相等判断的时候都使用equals()