处理对象
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));
}
}