总结一下
==和equals的区别:
==: 1.用于判断基本类型变量的值是否相等
2.用于判断引用类型的内存地址是否相等
equals:继承于Object类
1.默认也是判断引用类型的内存地址是否相等
2.equals可以被重写,规则可以重新定义
String类的equals方法:
String类,重写了equals方法,
判断的是字符串的字符序列的值,是否相等。
判断的是 字符串的内容是否相等
下面我举个实例:
String a="123";
String b="123";
a==b 输出的结果:true;
a.equals(b) 输出的结果: true;
原因是: a==b比较的是内存地址,栈里面是 a,b,“123”放在常量池中,它不会再去创建,而是直接运用,所以 a==b,相等,a.equals(b) 默认比较的是 内存地址,但String里面重写了equals方法,所以比较的是内容,所以a.equals(b) 输出的结果为true;
2.String a=new String("123");
String b=new String("123");
a==b 输出的结果:false;
a.equals(b) 输出的结果: true;
原因是: a==b比较的是内存地址,栈里面是 a,b,当每次new出一个对象的时候,它都会在堆里面开辟一个空间。所以比较地址时为false;
a.equals(b) 默认比较的是 内存地址,但String里面重写了equals方法,所以比较的是内容,所以a.equals(b) 输出的结果为true;
3. String a="123";
String b=new String("123");
原因是: a==b比较的是内存地址,栈里面是 a,b,当每次new出一个对象的时候,它都会在堆里面开辟一个空间。
a的123在常量池中,所以地址不相等,equals比较同上。