/**
* 总之:
“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】
基本数据类型比较:自然数值。
引用:比较的也是值,只不过不是数值,是变量本身的值(这个值是内存地址)
比如:String str="abc";str应用的值,是内存个地址。指向的对象的值
是"abc"
equal用于比较两个对象的值是否相同【不是比地址】 ,比较的前提,两个比较对象的类型要一样,然后再比较值。
如果类型不一样,返回肯定是false。
Object
public boolean equals(Object obj) {
return (this == obj);
}
其他类型:xx
public boolean equals(Object obj) {
if (obj instanceof xx) {
return value == ((xx)obj).byteValue();
}
return false;
}
【特别注意】Object类中的equals方法和“==”是一样的,没有区别,而String类,
Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,
当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。
*
*/
public class EqualsTest {
public static void main(String[] args) {
Byte a = 1;
Byte b = new Byte("1");
Byte c = 0x1;
System.out.println("a.equals(1):"+a.equals(1));
System.out.println("a==1:"+(a==1));
System.out.println("a.equals(b):"+a.equals(b));
System.out.println("a==b:"+(a==b));
System.out.println("c.equals(1):"+c.equals(1));
System.out.println("c==1:"+(c==1));
System.out.println("======================");
Integer i = 1;
System.out.println("i.equals(1):"+i.equals(1));
System.out.println("i==1:"+(i==1));
//==============================================
//对于基本类型的变量。"=="和"equal"的区别
//“==”对于基本数据类型,判断两个变量的值是否相等。
//“equal”不能用于基本数据类型。只能用于类变量。对于基本数据类型要用其包装类。
//对于对象变量,"=="和"equal"的区别
System.out.println("======================");
String st1="you ";
String st2="are super man";
String st3="you are super man";
String st4="you are super man";
Boolean b1=(st1==st2);
Boolean b2=(st1+st2)==st3;
Boolean b3=(st3==st4);
System.out.println("st1==st2:"+b1+"-----(st1+st2)==st3:"+b2+"-----st3==st4:"+b3);
//因为对象变量的存储的是对象在内存中的路径,即内存地址。所以用“==”比较时,即使
//对象的值相等,但是他们的内存地址不同,所以==的结果为false。故“==”用于比较两
//个变量的值是否相等,而不是变量引用的对象是否相等
Boolean r1=st1.equals(st2);
Boolean r2=(st1+st2).equals(st3);
Boolean r3=st3.equals(st4);
System.out.println("st1.equals(st2):"+r1+"-----(st1+st2).equals(st3):"+r2+"-----st3.equals(st4):"+r3);
//equal用于比较两个对象是否相同。
}
}
* 总之:
“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】
基本数据类型比较:自然数值。
引用:比较的也是值,只不过不是数值,是变量本身的值(这个值是内存地址)
比如:String str="abc";str应用的值,是内存个地址。指向的对象的值
是"abc"
equal用于比较两个对象的值是否相同【不是比地址】 ,比较的前提,两个比较对象的类型要一样,然后再比较值。
如果类型不一样,返回肯定是false。
Object
public boolean equals(Object obj) {
return (this == obj);
}
其他类型:xx
public boolean equals(Object obj) {
if (obj instanceof xx) {
return value == ((xx)obj).byteValue();
}
return false;
}
【特别注意】Object类中的equals方法和“==”是一样的,没有区别,而String类,
Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,
当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。
*
*/
public class EqualsTest {
public static void main(String[] args) {
Byte a = 1;
Byte b = new Byte("1");
Byte c = 0x1;
System.out.println("a.equals(1):"+a.equals(1));
System.out.println("a==1:"+(a==1));
System.out.println("a.equals(b):"+a.equals(b));
System.out.println("a==b:"+(a==b));
System.out.println("c.equals(1):"+c.equals(1));
System.out.println("c==1:"+(c==1));
System.out.println("======================");
Integer i = 1;
System.out.println("i.equals(1):"+i.equals(1));
System.out.println("i==1:"+(i==1));
//==============================================
//对于基本类型的变量。"=="和"equal"的区别
//“==”对于基本数据类型,判断两个变量的值是否相等。
//“equal”不能用于基本数据类型。只能用于类变量。对于基本数据类型要用其包装类。
//对于对象变量,"=="和"equal"的区别
System.out.println("======================");
String st1="you ";
String st2="are super man";
String st3="you are super man";
String st4="you are super man";
Boolean b1=(st1==st2);
Boolean b2=(st1+st2)==st3;
Boolean b3=(st3==st4);
System.out.println("st1==st2:"+b1+"-----(st1+st2)==st3:"+b2+"-----st3==st4:"+b3);
//因为对象变量的存储的是对象在内存中的路径,即内存地址。所以用“==”比较时,即使
//对象的值相等,但是他们的内存地址不同,所以==的结果为false。故“==”用于比较两
//个变量的值是否相等,而不是变量引用的对象是否相等
Boolean r1=st1.equals(st2);
Boolean r2=(st1+st2).equals(st3);
Boolean r3=st3.equals(st4);
System.out.println("st1.equals(st2):"+r1+"-----(st1+st2).equals(st3):"+r2+"-----st3.equals(st4):"+r3);
//equal用于比较两个对象是否相同。
}
}