java之处理对象

java对象都是 Object类的实例,都可以直接调用该类中定义的方法,这些方法提供了处理java对象的通用方法。

(一)打印对象和toString方法

package the6;

public class PrintObject {
    public static void main(String[] args)
    {
        Person p = new Person("ligang");
        System.out.println(p);
    }
}

运行上面的程序,我们得到的是“类名+@+hashcode”的输出。
事实上。我们这里输出的是Person对象的toString()方法的返回值
toString()方法是Object类里的一个实例方法。
但是现在,这个方法还没有实现“自我描述”的功能,因此我们需要重写这个方法。

package the6;

public class Apple {
    private double weight;
    private String color;

    public Apple(double weight, String color)
    {
        this.weight = weight;
        this.color = color;
    }

    public String toString()
    {
        return "一个苹果,颜色是" + this.color + "重量是" + this.weight;   
    }
}
package the6;

public class ToStringTest {
    public static void main(String[] args)
    {
        Apple ap = new Apple(10,"red");
        System.out.println(ap);
    }   
}

在上面的程序中,我们重写了Apple类的toString()方法,让它能够返回我们感兴趣的信息。

(二)==和equals方法

java中测试两个变量是否相等有两种方法:一种是利用==运算符,另一种是利用equals()方法。
当使用==来判断两个变量是否相等时,如果两个变量都是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),则只有两个变量的值相等,就将返回true.
但是对于两个引用类型变量,只有他们指向同一个对象时,==判断才会返回true.

public class EqualTest
{
    public static void main(String[] args)
    {
        int it = 65;
        float fl = 65.0f;
        // 将输出true
        System.out.println("65和65.0f是否相等?" + (it == fl));
        char ch = 'A';
        // 将输出true
        System.out.println("65和'A'是否相等?" + (it == ch));
        String str1 = new String("hello");
        String str2 = new String("hello");
        // 将输出false
        System.out.println("str1和str2是否相等?"
            + (str1 == str2));
        // 将输出true
        System.out.println("str1是否equals str2?"
            + (str1.equals(str2)));
        // 由于java.lang.String与EqualTest类没有继承关系,
        // 所以下面语句导致编译错误
//      System.out.println("hello" == new EqualTest());
    }
}

equals()方法是Object类提供的一个实例方法,因此所有的引用变量都可以调用这个方法来判断是否与其他引用变量相等。但是使用这个方法来判断两个对象相等的标准与使用==没有区别,同样要求两个引用变量指向同一个对象才会返回true。可是我们也注意到上面的代码中String类判断的结果和==不一样啊,那是因为String类已经重写了equals()方法了,在我们的实际开发中,我们可以根据自己的需要来重写equals()

package the6;

public class Monkey {
    private String name;
    private String idStr;
    public Monkey(){}
    public Monkey(String name, String idStr)
    {
        this.name = name;
        this.idStr = idStr;
    }

    public String getIdStr()
    {
        return this.idStr;
    }

    public boolean equals(Object obj)
    {
        if(this == obj) return true;
        if (obj != null && obj.getClass() == Monkey.class)
        {
            Monkey mk = (Monkey)obj;
            if(this.getIdStr() == mk.getIdStr())
            {
                return true;
            }
        }
        return false;
    }
}
package the6;

public class OverrideEqualsRight {
    public static void main(String[] args)
    {
        Monkey m1 = new Monkey("m1","12345");
        Monkey m2 = new Monkey("m2","12345");
        Monkey m3 = new Monkey("m3","123");

        System.out.println("m1是否等于m2:" + m1.equals(m2));
        System.out.println("m1是否等于m3:" + m1.equals(m3));
    }
}