当前位置: 技术问答>java相关
关于equals()的问题
来源: 互联网 发布时间:2017-03-31
本文导语: 在thinking in java 里有一段程序,我看不懂的是equal的用法 class Value { int i; } public class EqualsMethods { public void main(String[] args) { Value v1=new Value(); Value v2=new Value(); v1.i=v2.i=100; System....
在thinking in java 里有一段程序,我看不懂的是equal的用法
class Value
{
int i;
}
public class EqualsMethods
{
public void main(String[] args)
{
Value v1=new Value();
Value v2=new Value();
v1.i=v2.i=100;
System.out.println(v1.equals(v2));
}
}
书上说输出是false。
eauals ()比较的是句柄,但是这里句柄不一样吗?
请教各位了!
不胜感激!
class Value
{
int i;
}
public class EqualsMethods
{
public void main(String[] args)
{
Value v1=new Value();
Value v2=new Value();
v1.i=v2.i=100;
System.out.println(v1.equals(v2));
}
}
书上说输出是false。
eauals ()比较的是句柄,但是这里句柄不一样吗?
请教各位了!
不胜感激!
|
class Value
{
int i;
}
public class EqualsMethods
{
public static void main(String[] args)
{
Value v1=new Value();
Value v2=new Value();
v1.i = v2.i = 100;
System.out.println(v1.i);
System.out.println(v2.i);
System.out.println(v1);
System.out.println(v2);
System.out.println(v1.equals(v2));
}
}
这样你就清楚了,
v1.equals(v2)的时间,比较的是v1和v2的值,作为用户自定义类型(类)的话,比较的是对象声明构建以后所在的地址。
{
int i;
}
public class EqualsMethods
{
public static void main(String[] args)
{
Value v1=new Value();
Value v2=new Value();
v1.i = v2.i = 100;
System.out.println(v1.i);
System.out.println(v2.i);
System.out.println(v1);
System.out.println(v2);
System.out.println(v1.equals(v2));
}
}
这样你就清楚了,
v1.equals(v2)的时间,比较的是v1和v2的值,作为用户自定义类型(类)的话,比较的是对象声明构建以后所在的地址。
|
呵呵,这个基本问题有必要说清楚:
== 对于原始类型比较的是值,对于引用类型比较的是句柄(其实句柄也是值)
equal 是java.lang.Object的方法,源码:
public boolean equals(Object obj) {
return (this == obj);
}
也就是说,如果我们的类没有覆盖equals方法,那么效果跟==一样
如果我们的类覆盖了equals方法,那么效果就是你自己定义的了,像String类,覆盖了equals方法,判断并返回两者的内容是否一致。
搂主的举的例子肯定是false,如果返回了true,那么可以向你的jre的厂商举报bug了
== 对于原始类型比较的是值,对于引用类型比较的是句柄(其实句柄也是值)
equal 是java.lang.Object的方法,源码:
public boolean equals(Object obj) {
return (this == obj);
}
也就是说,如果我们的类没有覆盖equals方法,那么效果跟==一样
如果我们的类覆盖了equals方法,那么效果就是你自己定义的了,像String类,覆盖了equals方法,判断并返回两者的内容是否一致。
搂主的举的例子肯定是false,如果返回了true,那么可以向你的jre的厂商举报bug了
|
equals()方法必须重载才有用,对于java本身的程序库来说每个类几乎都可以使用equals()方法,因为在那些类里面已经将他重载,在上面你自己定义的类中,你没有重载equals()方法,所以他不能执行你期望的比较!
|
The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).
JDK的help上写得很明白.
JDK的help上写得很明白.
|
Value v1=new Value();
Value v2=new Value();
v1.i=v2.i=100;
V1,V2的地址一樣嗎?
Value();又沒有對equals做重載
Value v2=new Value();
v1.i=v2.i=100;
V1,V2的地址一樣嗎?
Value();又沒有對equals做重載