当前位置: 技术问答>java相关
请各位解析一下为什么?
来源: 互联网 发布时间:2015-04-04
本文导语: class Value { static int i; public Value(int par){ i=par; System.out.println("xxxxxx:"+i); } } public class Value1 { public static void main(String[] args) { Value v1 = new Value(4); Value v2 = new Value(4); Integer I1=new Integ...
class Value {
static int i;
public Value(int par){
i=par;
System.out.println("xxxxxx:"+i);
}
}
public class Value1 {
public static void main(String[] args) {
Value v1 = new Value(4);
Value v2 = new Value(4);
Integer I1=new Integer(33);
Integer I2=new Integer(33);
System.out.println(v1.equals(v2));//为什么是假?
System.out.println(I1.equals(I2));//为什么是真?
}
}
为什么我自定义的方法比较之后返回假呢。系统的为什么返回的是真呢?
static int i;
public Value(int par){
i=par;
System.out.println("xxxxxx:"+i);
}
}
public class Value1 {
public static void main(String[] args) {
Value v1 = new Value(4);
Value v2 = new Value(4);
Integer I1=new Integer(33);
Integer I2=new Integer(33);
System.out.println(v1.equals(v2));//为什么是假?
System.out.println(I1.equals(I2));//为什么是真?
}
}
为什么我自定义的方法比较之后返回假呢。系统的为什么返回的是真呢?
|
因为你的Value没有重载equals方法,结果
v1.equals(v2) 等价于 v1 == v2 ,判断地址是否相等。肯定不等嘛
Integer重载了equals方法,
I1.equals(I2)实际上Integer里面的方法会判断两个对象的值是否相等,而不是地址,所以为真
v1.equals(v2) 等价于 v1 == v2 ,判断地址是否相等。肯定不等嘛
Integer重载了equals方法,
I1.equals(I2)实际上Integer里面的方法会判断两个对象的值是否相等,而不是地址,所以为真
|
public boolean equals(Value val)
{
return this.i == val.i?true:false
}
{
return this.i == val.i?true:false
}
|
class Value {
static int i;
public Value(int par){
i=par;
System.out.println("xxxxxx:"+i);
}
public boolean equals(Object o){
if(o instanceof Value ){
Value v = (Value)o;
if(v.i==this.i) return true;
else return false;
}
return false;
}
}
|
to hanson_yi:
看了你的代码我忍不住晕倒
你的代码应该这样写:
public boolean equals(Value val)
{
return (this.i == val.i);
}
to 顶楼的:
不要把i 定义成static,肯定不是你想要的
看了你的代码我忍不住晕倒
你的代码应该这样写:
public boolean equals(Value val)
{
return (this.i == val.i);
}
to 顶楼的:
不要把i 定义成static,肯定不是你想要的
|
看Integer 的原代码实现是这样的
public final class Integer extends Number implements Comparable {
//略
private int value;
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
}
要实现同样的功能,就要重载equals方法
还有
class Value {
static int i; //static 感觉有问题,应该是private 才好,不然,这些值不就都相等了
}
建议
class Value {
private int i;
public Value(int par){
this.i=par;
System.out.println("xxxxxx:"+i);
}
public boolean equals(Object o){
if(o instanceof Value ){
return this.i == ((Value)o).i;
}
return false;
}
}
public final class Integer extends Number implements Comparable {
//略
private int value;
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
}
要实现同样的功能,就要重载equals方法
还有
class Value {
static int i; //static 感觉有问题,应该是private 才好,不然,这些值不就都相等了
}
建议
class Value {
private int i;
public Value(int par){
this.i=par;
System.out.println("xxxxxx:"+i);
}
public boolean equals(Object o){
if(o instanceof Value ){
return this.i == ((Value)o).i;
}
return false;
}
}
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。