equals方法:
本属于Object,
但是 String类从Object中继承并重写了equals方法;被更改的作用,用来检测两个对象是否相等,即两个对象的内容是否相等,(区分大小写);
"==":用来比较引用和比较基本数据类型时具有不同的功能;
(1)比较基本数据类型,如果两个值相同,则结果为true;
(2)而在比较引用时,如果引用指向内存中的同一对象,结果为true;
package day03;
public class Test_equals {
String name;
String sex;
int age;
Test_equals(String name,String sex, int age){
this.name=name;
this.sex=sex;
this.age=age;
}
public static void main(String[] args) {
//创建两个对象
Test_equals t1=new Test_equals("软件小宇", "男", 20);
Test_equals t2=new Test_equals("软件小宇", "女", 21);
// 用"=="相互比较,比较的是其在栈内存中 存储的地址是否指向同一内存存储空间
System.out.println(t1 == t2);//显示结果 "false" //
//用 "equals" 进行比较,现在只是普通调用 object中的equals()方法,判断括号中的对象"t2"是否与t1 "相等",
//判断相等的依据是与 "==" 比较的引用(即地址)是否指向同一对象,由于是new出来的对象所以在栈内存中都会分配一个唯一的地址,且开辟新的内存存储
System.out.println(t1.equals(t2)); //显示结果 "false"
System.out.println("#################################################");
//首先,变量在创建后会在内存中开辟一块存储空间,并将变量名作为其对程序显示的地址,用户可以通过变量名访问到对应存储的数据
//然后就是,储存机制,当内存中已经存储过内容和数据类型一样的数据时,不会再开辟新的内存空间,后创建的变量直接指向已有的内存空间,
System.out.println(t1.name == t2.name);//由于引用指向同一对象的存储空间,所以返回true
System.out.println(t1.name.equals(t2.name));由于引用指向同一对象,所以返回true
//示例二;
System.out.println("示例二#################################################################");
String str1=new String("软件小宇");
String str2=new String("软件小宇");
String str3="软件小宇";
String str4="软件小宇";
//String重写了object中的equals()方法, 被用来检测两个对象的内容是否相等
System.out.println(str1 == str2 );//false //由于str1与str2都是new出来的,都拥有自己的存储空间,所以返回false
System.out.println(str1.equals(str2));//true // 由于String重写了object中的equals方法,用来判断的是,对象中存储的内容,所以返回true
System.out.println(str1 == str3);//false //str1是new出来的对象,拥有自己的存储空间,str3要同样拥有自己的存储空间
System.out.println(str1.equals(str3)); //true 由于String重写了object中的equals方法,用来判断的是,对象中存储的内容,所以返回true
System.out.println(str3 == str4);//true //由于引用指向同一对象的存储空间,所以返回true
System.out.println(str3.equals(str4));//true 由于String重写了object中的equals方法,用来判断的是,对象中存储的内容,所以返回true
}
}
以上均为个人理解,如果有不同观点欢迎和小宇沟通.