二: "=="和equals方法有什么区别
A.==操作符专门用来比较变量的值是否相等,由于变量名只是内存地址的引用名称,所以而不代表变量本身,由此可知道变量的值指的是好像某一块内在地址,请看示例
Int intA=10;
Int intB=10;
int intArrA[]=new int[2];
int intArrB[]=new int[2];
for(int i=0;i<2;i++){
intArrA[i]=0;
intArrB[i]=0;
}
System.out.println("(intA==intB)="+(intA==intB));
System.out.println("(intArrA==intArrB)="+(intArrA==intArrB));
System.out.println("(intArrA[0]==intArrB[0])="+(intArrA[0]==intArrB[0]));
输出结果是:
(intA==intB)=true
(intArrA==intArrB)=false
(intArrA[0]==intArrB[0])=true
从结果可知, intArrA和intArrB是数组名称,故代表的是内存指针,所以上述结论在此可以通过,另外
因: intArrA[0],intArrB[0]分别在不同的地址,所以(intArrA[0]==intArrB[0])好像是在为false,但是intArrA[0],intArrB[0]分别仅仅是代表地址所存储的内容,因此, (intArrA[0]==intArrB[0])应该为真.
故, ==操作符专门用来比较变量的”内容”或者”实质”是否相等的;
如: intA的内容是10,intB的内容也是10所以intA和intB是相等的,
intArrA的内容是一个int类型的数组内存区域, intArrB的内容也是一个int类型的数组内存区域,且长度相等,但是他们是并非是同 一内在区域,而是在内存的两个不同地方,所以他们不相等
B. equals()方法
equals() 方法是Object的方法,因为一切java类的基类是Object方法,所以,equals方法一定存在于任何一个类里面,且用户在继承某一类并且重定义该方法,此时equals方法的作用则于用户决定了,
但是,我们没有去定义它,我们的要定义的类的所有你类也没有重新定义它,那它的作用就和Object 的方法的一样了,因Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果.
所以总结一句话, ==是”内容”(或实质),而equals是表象