码迷,mamicode.com
首页 > 其他好文 > 详细

处理对象

时间:2015-02-21 06:30:58      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

5.2.1.打印对象和toString方法

package code;
public class PrintObject{
    public static void main(String[] args){
         Person p = new Person("孙悟空");
         System.out.println(p);
    }
}
class Person{
    private String name;
    public Person(String name){
        this.name = name;
    }
}

toString是一个“自我描述”的方法

package code;
class Apple{
    private String color;
    private double weight;
    public void setColor(String color){
        this.color = color;
    }
    public String getColor(){
        return color;
    }
    public void setWeight(double weight){
        this.weight = weight;
    }
    public double getWeight(){
        return weight;
    }
    public Apple(){}
    public Apple(String color,double weight){
        this.color = color;
        this.weight = weight;
    }
    public String toString(){
        return("这个苹果的颜色是:" + color + ",重量是:" + weight);
    }
}
public class ToStringTest{
    public static void main(String[]args){
        Apple a = new Apple("红色",5.5);
        System.out.println(a);
    }
}

这个苹果的颜色是:红色,重量是:5.5

通过重写Apple类的toString()方法,就可以让系统在打印Apple对象时打印出该对象的“自我描述”信息。
通常将Apple类的toString()方法改为:

public String toString(){
        return "Apple[color=" + color + ",weight=" + weight + "]";
    }

Apple[color=红色,weight=5.5]

5.2.2. ==和equals方法
对于两个引用类型变量,只有指向同一个对象时,==判断才会返回true。==不可用于比较类型上没有父子关系的两个对象。

package code;
public class EqualTest{
    public static void main(String[] args){
        int it = 65;
        float fl = 65.0f;
        System.out.println("65和65.0f是否相等" + (it==fl));

        char ch = ‘A‘;
        System.out.println("65和‘A‘是否相等" + (it == ch));

        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println("str1和str2是否相等" + (str1==str2));
        System.out.println("str1是否equals str2" + str1.equals(str2));

        //由于java.lang.String与EqualTest类没有继承关系,
        //所以下面编译错误
        //System.out.println("hello" == new EqualTest());
    }
}

常量池(constant pool)专门用于管理在编译时被确定并保存在已编译的.class文件中的一些数据,它包括关于类,方法,接口中的常量,还包括字符串常量。
JVM常量池保证相同的字符串直接量只有一个,不会产生多个副本,使用new String()创建的字符串对象是运行时创建出来的,他被保存在运行时内存区,不会放入常量池
String已经重写了Object的equals()方法,String()方法判断两个字符串相等的标准是:只要两个字符串所包含的字符序列相同,通过equals()比较返回true,否则返回false

package code;
public class OverrideEqualsRight{
    public static void main(String [] args){
        Person p1 = new Person("孙悟空","12343433433");
        Person p2 = new Person("孙行者","12343433433");
        Person p3 = new Person("孙悟饭","99933433");

        System.out.println("p1和p2是否相等" + p1.equals(p2));
        System.out.println("p1和p2是否相等" + p2.equals(p3));

    }
}
class Person{
    private String name;
    private String idStr;
    public Person(){}
    public Person(String name,String idStr){
        this.name = name;
        this.idStr = idStr;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public void setIdStr(String idStr){
        this.idStr = idStr;
    }
    public String getIdStr(){
        return idStr;
    }
    public boolean equals(Object obj){
        //
        if(this == obj) 
            return true;
        if(obj != null && obj.getClass() == Person.class){
            Person personObj = (Person)obj;
            if(this.getIdStr().equals(personObj.getIdStr())){
                return true;
            }
        }
        return false;
    }
}

p1和p2是否相等true
p1和p2是否相等false

上面程序重写了equals()方法,制定了Person对象和其他对象相等的标准,另一个对象必须是Person类的实例,且两个对象的idStr相等,即可判断两个Person对象相等。

对于instanceof运算符而言,当前面对象是后面类的实例或其子类的实例时都返回true,所以重写equals()方法判断两个对象是否为同一个类的实例时使用instanceof是有问题

处理对象

标签:

原文地址:http://blog.csdn.net/u014270902/article/details/43895291

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!