处理对象

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

  • 打印对象和toString方法
public class Person
{
    private String name;
    public Person(String name)
    {
        this .name=name;
    }
}
public class PrintObject
{
    public static void main(String[] args) {
        Person p=new Person("齐天大圣");
        System.out.println(p);
        System.out.println(p.toString());//与上面打印对象 
    }
}

可见打印对象输出的结果和打印引用调用toString方法一样,因此所有Java对象都具有toString方法

不仅如此,所有Java对象都可以和字符串进行连接运算,当Java对象和字符串进行连接运算时,系统自动调用Java对象toString()方法的返回值和字符串进行连接运算,即下面两行代码实现结果也等效

var p=p+" ";
var p=p.toString()+" ";

toString方法是一个特殊的方法,它是一个“自我描述”的方法,该方法通常用于实现这样一个功能:当程序员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用以告诉外界该对象具有的状态信息。

Object类提供的toString()方法总是返回该对象实现类的“类名+@+hashCode”值,这个返回值并不能真正实现“自我描述”的功能,因此如果用户需要自定义类能实现“自我描述”的功能,就必须重写Object类的toString()方法,例如:

public class Apple
{
    private String color;
    private double weight;
    public Apple(){}
    public Apple(String color,double weight)
    {
        this.color=color;
        this.weight=weight;
    }
    //重写toString方法,实现自我描述功能
    public  String toString()
    {
       return "一个苹果,颜色是:"+color
       +" 重量是:"+weight+"kg";
    }

    public static void main(String[] args) {
        Apple a=new Apple("红色",1);
        System.out.println(a.toString());
         System.out.println(a);
    }
}

从上面的运行结果可以看出,通过重写Apple类的toString()方法,就可以让系统在打印Apple对象时打印出该对象的“自我描述”信息。

大部分时候,重写toString()方法总是返回该对象的令人感兴趣的信息所组成的字符串。通常可返回如下格式的字符串:

类名[field=值1,field=值2,…=]

return "Apple[color=" + color + ",wight=" + weight + "]";
  • ==和equals方法
    == : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型 == 比较的值,引用数据类型 == 比较的是内存地址)。
    equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
    Object的equals方法是比较的对象的内存地址;
    重写的String方法是比较的对象的值。
    Java程序中测试两个变量是否相等有两种方法,一种是利用==运算符,另一种是利用equals()方法
    当使用==来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不严格要求两个数值类型也一定要相同),则只要两个变量的值相等,则将返回true值。
    但对于两个引用类型变量,只有它们指向同一个对象时,==判断才会返回true。==不可用于比较类型上没有父子关系的两个对象。
public class Practice1
{
    public static void main(String[] args)
    {
        int a=15;
        double b=15.00d;
        System.out.println(a==b);
        String c="500f";
        String d="500f";
        String e=d;
        System.out.println(d.equals(e));
        System.out.println(d==e);
        //System.out.println(new Practice1()==d);   因为d和Practice1类没有继承关系,所以语法格式不合格
        System.out.println(new Practice1().equals(d));
    }
}