equals和==有什么区别?
==
== 是用来比较值是否相同的这个值可以是基本类型的值,或者是引用类型的地址
public class Main {
public static void main(String[] args) {
int n=3;
int m=3;
System.out.println(n==m);
String str = new String("hello");
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1==str2);
str1 = str;
str2 = str;
System.out.println(str1==str2);
}
}
对应的结果是true false true
总结:可以看出,==比较的是值得大小,基本类型的变量比较的是值引用类型的变量比较的是内存中的地址。
equeals
equlas比较两个对象的内容是否相同,equals中不能作用基本数据类的变量
浮点型:float(4 byte), double(8 byte)
整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)
字符型: char(2 byte)
布尔型: boolean
总结:如果类没有对equals方法重写,比较的是引用类型的变量所指向的对象地址,如果对equals方法重写了,比较的所指向的对象的内容
特殊的String类型
public class Strin {
public static void main(String[] args) {
String a="abc";
String b="abc";
String c=new String("abc");
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(a==c);
System.out.println(a.equals(c));
}
}
true
true
false
true
总结:Stirng是一种特殊的类型,java中不用new String就能够创建字符串对象String s=
”abc",存放在方法区中的运行时常量池中,再次执行String
c=“abc"的时候,首先会在常量池中查找有没有”abc"字符串,如果有的话将引用变量c指向abc,两个变量指向的是同一个字符串,如果没有将会在常量池中重新创建一个"abc“字符串对象,如果是String
d=new String(”abc")这种形式,会直接创建一个新的字符串对象,引用变量c和d指向的地址不同,==
为false,equals为true