这几天在看thinking in java 4th,今天看到关于equals的用法....感觉有点模糊...书上的例子是这样的:
class Value
{
int i;
}
public class EqualsMethod
{
public static void main(String [] args)
{
Value v1 =new Value();
Value v2 =new Value();
v1.i=v2.i =100 ;
System.out.println(v1.equals(v2));
}
}
class Value
{
int i;
}
public class EqualsMethod
{
public static void main(String [] args)
{
Value v1 =new Value();
Value v2 =new Value();
v1.i=v2.i =100 ;
System.out.println(v1.equals(v2));
}
}
equals()方法是在Object类中定义的方法,声明格式:public boolean equals(Object obj) 比较规则是:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则false. 另外,JDK中有些类,比如java.lang.String类的equals()方法比较规则是:如果两个对象的类型一致,并且内容一致,就返回true. Boolean b1 = new Boolean(true) ;
Boolean b2 = new Boolean(true) ;
if(b1==b2)
if (b1.equals(b2))
System.out.println("a") ;
else
System.out.println("b") ;
else
if(b1.equals(b2))
System.out.println("c") ;
else
System.out.println("d") ;所以,比较后的输出结果应该是 c
如果 i==j 返回的是true,这时i和j的hascode相等equals比较的值
如果 i.equals(j) 返回的是true,这时i和j的hascode不一定相等
{
int i;@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Value other = (Value) obj;
if (i != other.i)
return false;
return true;
}
}
int,double等等
int a = 1;
int b = 2;
int c = 1;
System.out.println(a == b);
System.out.println(a == c);对于对象来说,因为JAVA全部是引用
所以直接使用==就是比较了他的引用地址,而不是值
String a = "1"; //假设内存地址为0x00000001
String b = "2"; //假设内存地址为0x00000002
String c = "1"; //假设内存地址为0x00000003
System.out.println(a == b); //0x00000001不等于0x00000002 返回false
System.out.println(a == c);//0x00000001不等于0x00000003 返回falseSystem.out.println(a.equals(b)); //a的值是'1' b的值是'2' 返回false
System.out.println(a.equals(c)); //a的值是'1' c的值是'1' 返回true
String a = "1"; //假设内存地址为0x00000001
String c = "1"; //假设内存地址为0x00000003
这两个会分配不同的内存地址吗?
在object 里,==和equals()比较的是一样效果,我们在用时候,要重写equals()方法,
我们要什么效果,就改写成什么效果!String类已经重写了这个方法,比较的是两个对象是否
有相同的字符序列。
value v2 = new Value();
由于你没有重写equals()方法,所以此时用==和equals()方法的效果是一样的。由于你没有重写equals()方法,所以此时用==和equals()方法的效果是一样的。
比较的都是内存里的地址。这里的地址是不同的,因为new了两个不同的对象!
就是说这个意思,类对象的引用地址
该方法实现比较逻辑(这个逻辑你自己写),返回的是一个boolean变量