荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: heiheihei (瓦尔特), 信区: Java
标  题: java手记(2)--关系运算符
发信站: 荔园晨风BBS站 (Thu Nov  8 19:52:08 2001), 转信

java手记(2)--关系运算符
                                          瓦尔特

java中,所有的概念都是"类",对于关系运算也是一样.如果对于类进行关系运算,实际上
运算的还是"句柄".
例子1
//Equivalence.java
public class Equivalence
{
    public static void main(String[] args)
    {
        Integer n1=new Integer(100);
        Integer n2=new Integer(100);
        System.out.println(n1==n2);
        System.out.println(n1!=n2);
    }
}
运行结果:
C:\myjava>java Equivalence
false
true
可以看出,得到的结果恰巧和一般人预期的相反.因为这里面比较的就是n1和n2两个整数
类的句柄.

在这里面,比较对象的实际值是否相同只能采用下面的办法.
例子2:
//Equals.java
public class Equals
{
    public static void main(String[] args)
    {
        Integer n1=new Integer(100);
        Integer n2=new Integer(100);
        System.out.println(n1.equals(n2));
    }
}
结果:C:\myjava>java Equals
true

但关于赋值的问题到这里并没有结束.
例子3:
//Equals2.java
class Value
{
    int i;
}
public class Equals2
{
    public static void main(String[] args)
    {
        Value n1=new Value();
        Value n2=new Value();
        n1.i=100;
        n2.i=100;
        System.out.println(n1.equals(n2));
    }
}
结果:C:\myjava>java Equals2
false
这是由于equals方法的默认行为是比较对象的句柄.所以除非自己定义了equals的行为,
否则是不可能去比较值的.Integer类就定义了equals方法,行为是对值进行比较.大多数
的java类库重新定义了equals()方法.

                                瓦尔特学自thinking in java
--

世界上没有任何话能说服你,除非它是你心中的那一句。

世界上没有任何人能打动我,除非她是我心中的那一个。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 202.118.1.82]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店